概率、信息和熵

 机器学习与数据挖掘  概率、信息和熵已关闭评论
11月 301999
 

以前写过一篇关于最大熵模型的读书笔记。刚翻陈家鼎和郑忠国两位老师合编的教材《概率与统计》(北大出版社,2007),看到关于信息熵的详细数学表述,不妨转述一下,算是不在场的课堂笔记。

概率与信息

事件A的概率P(A)是A发生可能性的大小的度量。

问题:A的发生带给我们多大的信息呢?

结论

P(A)越大,则A发生带来的信息越少;反之,P(A)越小,则A的发生带来的信息越大。

例子

有人对你说“某日巴西足球队战胜了中国队”,你觉得他没有给你多少信息,因为这件事发生的概率非常大,结果几乎在预料当中。但如果他说巴西负于某个亚洲队,你会感觉得到的信息不少。

猜想

  1. 事件A发生所带来的信息量H(A)应该是它发生的概率P(A)的严格减函数,而且A是必然事件时H(A)=0(“巴西队战胜中国队”)。
  2. 若事件A与事件B相互独立,则A与B都发生带来的信息量应该是H(A)与H(B)之和,即H(AB)=H(A)+H(B)。

引理1—H(u)=-clnu

设H(u)是(0,1]上的严格减函数,H(1)=0,则为了满足H(uv)=H(u)+H(v),对一切0<u,v<1,必须且只需存在c>0,使得H(u)=-clnu,写得更清楚些是—c*ln(u)。

(这里c是一个正的常数,它的大小涉及信息量的单位。为简单起见,一般取c=1)

定义1—信息量的表示

设事件A的概率是P(A),P(A)>0,则称H(A)=-lnP(A)为A带来的信息量。

定义2—完备事件组的熵

设A1到An(n>=2)是条件S下的完备事件组,P(Ai)>0,对i=1,…n,则称P(A1…An)=-sumP(Ai)lnP(Ai),为完备事件组A1…An的熵。

定理1—事件有相等的概率时结果的不确定性最大

设A1到An(n>=2)是完备事件组,则当且仅当P(A1)=…P(An)时熵最大。

即,若条件S下可能发生的互不相容的事件至少有两个,则当且仅当这些事件有相等的概率时结果的不确定性最大。

Technorati Tags: , , , , ,

Hull书上的一个小例子

 金融计算  Hull书上的一个小例子已关闭评论
11月 301999
 

进来闲些,就想把手头正看着的Hull那册options, futures, and other derivatives (6th ed.)中的模型和例子都拿SAS写一遍。先拿ch4: Interest Rate中的一个小东西练手(p.78 Table 4.1),说复利的计算次数对利息的影响。以下,

/*************************

A:本金

m: 复利计算的次数

n: 年数

R: 年利率

FV: 终值

*************************/

options nodate nonotes nosource;
%macro rate(A=,m=,n=,R=);
data _null_;
    format FV 6.2;
    FV=&A*(1+&R/&m)**(&m*&n);
    %put _user_;
    put FV=;
run;
%mend rate;
proc printto log="D:\rate.dat" new;
%rate(A=100,m=1,n=1,R=0.1)
%rate(A=100,m=2,n=1,R=0.1)
%rate(A=100,m=4,n=1,R=0.1)
%rate(A=100,m=12,n=1,R=0.1)
%rate(A=100,m=52,n=1,R=0.1)
%rate(A=100,m=365,n=1,R=0.1)
proc printto;
run;
data rate;
    infile "D:\rate.dat";
    length m 3.;
input #1 m & 8-10
        #2 n 8
        #3 A 8-10
        #4 R 8-10
        #5 FV 4-9;
if _error_=0 then output;
run;
proc print data=rate;
run;

以上为适应书上的例子,很多地方写死(hard coding)了。最后的结果跟书上一样,不过以上展示了更多,由各种复利计算次数求出相应的利息,然后从日志文件读出结果再展示:

Obs      m    n     A      R       FV

1       1    1    100    0.1    110.00
2       2    1    100    0.1    110.25
3       4    1    100    0.1    110.38
4      12    1    100    0.1    110.47
5      52    1    100    0.1    110.51
6     365    1    100    0.1    110.52

Ryszard Michalski

 人物  Ryszard Michalski已关闭评论
11月 301999
 

刚从kdnuggets看到的消息,机器学习/数据挖掘领域的领军人物之一,美国乔治马森大学(George Mason University ,GMU)教授,Ryszard S. Michalski(中译名迈克尔斯基),于2007年9月20号死于癌症,享年70岁。

ME/OBIT-MICHALSKI 看到这个消息有些触动,是因为手头就有他与人合著的《机器学习与数据挖掘:方法和应用》(Machine Learning and Data Mining Methods an Applications, John Wiley & Sons Ltd.,1998。朱明等译,北京:电子工业出版社,2004,“数据仓库与数据挖掘技术应用丛书”)。这本书的计算机气息比较浓。学校图书馆还有他编的《机器学习:实现人工智能的途径》(王树林等译,北京:科学出版社,1992),英文名叫Machine learning : an artificial intelligence approach(Berlin : Springer, 1984)。

Michalski生于波兰,在波兰和俄罗斯接受大学与博士教育,1970年定居美国。

在Visual C++ 2008配置QuantLib

 金融计算  在Visual C++ 2008配置QuantLib已关闭评论
11月 301999
 

稍微了解了下quantlib。它是一个开源的C++库,在数量金融社区(quant)里名气最大。 这些日子在学习C++和金融计算的活计,正好有用。今在机器里配置了一个quantlib的环境,配置boost时参考了quantnet论坛的一个帖子(Boost 1.35.0 + Quantlib 0.9.0 with Visual Studio 2008),记录先:

QuantLib-0.9.6

boost_1_35_0

Microsoft Visual C++ 2008 Express Edition

Microsoft Windows  XP Professional Version 2002, Service Pack 2

Intel(R) Core(TM)2 Duo CPU, 1.95GB of RAM

 

1. 去微软主页下载并安装Microsoft Visual C++ 2008 Express Edition

2-1.去sourceforge下载boost_1_35_0.zip,并解压到C盘。最后,新出现C:\boost_1_35_0

2-2.打开一个Command Prompt(Ctrl+R->cmd),把盘符指向C:\boost_1_35_0\tools\jam\src,运行build.bat,这将产生以下要用的bjam.exe

2-3. 把盘符指向C:\boost_1_35_0,运行以下命令

tools\jam\src\bin.ntx86\bjam.exe --build-type=complete
这将花n多时间。没有计时,我是先忙活其他的事,一个小时后看到运行成功。
2-4.接着运行以下命令:
tools\jam\src\bin.ntx86\bjam.exe --build-type=complete install
这又将花掉大概n的一半的时间。成功后,你将看到一个新的文件夹C:\Boost
3.去sourceforge下载QuantLib-0.9.6.zip,并解压到C盘。最后,新出现C:\QuantLib-0.9.6
4-1. 打开Microsoft Visual C++ 2008 Express Edition ->Tools->Options->Projects and Solutions->
VC++ Directories->Show directories for:->Include files,新添一行C:\Boost\include\boost-1_35
include 
 同样,在Library files中新添一行C:\Boost\lib
lib 
4-2. 打开VC2008->File->Open->Project/Solution,打开C:\QuantLib-0.9.6\QuantLib_vc9.sln,导入QuantLib后,你就将看到,
clip_image002
5-1. 选中上图中的QuantLib,右键选中Set As Startup Project,然后右键选中build,……漫长等待……直到成功。
(注:在build的过程中,老冒出一行警告:
The file contains a character that cannot be represented in the 
current code page (936).Save the file in Unicode format to prevent data loss
大概跟我机器的local有关,后来证明对功能没有影响。)
5-2. 重复以上动作(先Set As Startup Project再build),对其余的项目如BermudanSwaption等做同样的操作,
build成功后,可以按Ctrl+F5查看程序运行结果。That's all and have fun!

答客问:SAS对列求和

 未分类  答客问:SAS对列求和已关闭评论
11月 301999
 

SAS Base自带的累加函数SUM,虽然有漂亮的缩写方式如SUM(of x1-x100000),但几乎没有什么应用价值(除了在数组array下),因为SUM函数是对行求和,而在通常的二维表中,我们经常需要对列求和。这个问题用proc SQL过程最为方便,还有一个简单的替代方案就是在proc print步下使用SUM选项。比如,对count求和:

data a;
    input ID sex $ count;
cards;
1 M 3
2 F 4
3 M 5
4 F 5
;
proc print data=a;
    sum count;
run;

结果显示:

Obs    ID    sex    count

 1      1     M        3
 2      2     F        4
 3      3     M        5
 4      4     F        5
                    =====
                      17

如果想按sex分组显示,则先对sex排序:

proc sort data=a;
    by sex;
run;
proc print data=a;
    sum count;
    by sex;
run;

结果显示:

——————————————— sex=F ———————————————–

                                         Obs    ID    count

                                           1     2      4
                                           2     4      5
                                         —          —–
                                         sex            9

———————————————- sex=M ———————————————–

                                         Obs    ID    count

                                           3     1       3
                                           4     3       5
                                         —          —–
                                         sex             8
                                                      =====
                                                        17

当然,你可以让结果更紧凑些,比如在proc print中的by sex下面再加一个id sex,看起来就是这样:

sex    ID    count

 F      2       4
        4       5
—          —–
 F              9

 M      1       3
        3       5
—          —–
 M              8
             =====
               17

Technorati Tags: , ,

SAS/IML,及其与R/S-Plus、SciLab/Matlab的比较(1)

 未分类  SAS/IML,及其与R/S-Plus、SciLab/Matlab的比较(1)已关闭评论
11月 301999
 

SAS的矩阵语言IML(Interactive Matrix Language)只可以处理二维表,数据类型不如R、Matlab等同类矩阵语言丰富,不过它对矩阵的表达和操纵能力一样厉害,而且与SAS程序和数据的相互访问通讯比较好,不妨一学。矩阵语言,看着也类似,下面就做个IML与R/S-Plus、SciLab/Matlab的比较(我手头只有R跟SciLab,以下的例子就用它们,这两个东西我不熟,不妨随时指正。)一句话,SAS/IML在定义矩阵时跟SciLab/Matlab差不多,在提取矩阵元素时跟R/S-Plus相近些:

1.定义矩阵

定义矩阵 SAS/IML R/S-Plus SciLab/Matlab
标量 a={1} 或者a=1 a=1 a={1}

重复a={2 2 2}

a={[3] 2 }

a=rep(2,3)

 
循环,1到100 a=1:100   a=1:100
循环,1到100,步长为2 a=do(1,100,2)  

a=1:2:100

1*3行向量 a={1 2 3} a=array(c(1,2,3),dim=c(1,3)) a=[1 2 3]

3*1列向量

a={1,2,3}

a=array(c(1,2,3),dim=c(3,1))

a=[1;2;3] or a={1;2;3}

2*3矩阵

b={1 2 3, 4 5 6 }

a=array(c(1,2,3,4,5,6),dim=c(2,3))

b=[1 2 3; 4 5 6 ]

3*3单位阵

c=I(3)

 

a=eye(3,3)

2*3零矩阵 

d=J(2,3,0)

 

zeros(2,3)

2*3全一矩阵

e=J(2,3,1) or J(2,3)

 

a=ones(2,3)

2.矩阵操纵

矩阵操纵 SAS/IML R/S-Plus SciLab/Matlab

2行3列,

b=a[2,3]

b=a[2,3]

b=a(2,3)

所有行

a[2,]

a[2,]

b=a(2,:)

所有列

a[,3]

a[,3]

b=a(:,3)

均值

b=a[:]

 

b=a(:) 所有元素

水平叠加(列相加) a||b cbind(a,b) c=[a,b]
垂直叠加(行相加) a//b rbind(a,b)  
取最大 a<>b pmax(a,b)  
取最小 a><b pmin(a,b)  

3.矩阵运算

矩阵运算 SAS/IML R/S-Plus SciLab/Matlab

求逆

inv(a)

inv(a)

inv(a)

行列式 det(a)   det(a)
rank(a)   rank(a)
trace(a)   trace(a)

元素相乘 

a#b

a*b

a.*b

元素幂 

a##b

a^b

a.^b

a**2=a*a

 

a^2=a*a

矩阵乘法

a*b

a%*%b

 

转置

t(a) or a`

t(a)

a’

对角阵 

diag(a)

diag(a)

 

对角元素

vecdiag(a)

diag(a)

 
Kronecker乘积 a@b   kron(m1,m2)
特征值
特征向量
eigval(a)
eigvec(a)
 

[eigenvector, eigenvalue]=eig(m)

matlab

常见数据挖掘错误:识别和纠正(译稿)

 机器学习与数据挖掘  常见数据挖掘错误:识别和纠正(译稿)已关闭评论
11月 301999
 

与ttnn的几个朋友一起翻译的一篇稿子,是SAS公司Doug Wielenga在今年SAS全球论坛的一篇会议论文,Identifying and Overcoming Common Data Mining Mistakes.翻译这篇文章得到了SAS公司与作者本人的许可,并许诺不做于商业用途。

你可以自由散发这个译本,并保证不用做商业用途,引用时请注明“《ttnn BI 观点》集体翻译”。有任何问题可以与译者联系,联系信息在文档的末尾。

翻译这篇文字的过程,见《常见数据挖掘错误:识别和纠正》翻译告捷!》;

译稿下载,在http://groups.google.com/group/ttnn/web/kuihuabaodian.pdf

原稿,在http://www.iapa.org.au/Environments/edoras/Resources/IAPA/SAS%20Global%20Forum%200732007.pdf.

附,这篇文章的结构如下:

Abstract
Introduction

1.          Preparing The Data

1.1           Failing To Consider Enough Variables

1.2           Incorrectly Preparing Or Failing To Prepare Categorical Predictors

1.2.1      Too Many Overall Levels

1.2.2      Levels That Rarely Occur

1.2.3      One Level That Almost Always Occurs

1.3           Incorrectly Preparing Or Failing To Prepare Continuous Predictors

1.3.1      Extremely Skewed Predictors

1.3.2      A Spike And A Distribution

1.3.3      One Level That Almost Always Occurs

1.3.4      Ignoring Or Misusing Time-Dependent Information

2            Defining Roles, Performing Sampling, And Defining Target Profiles

2.1           Inappropriate Metadata

2.2           Inadequate Or Excessive Input Data

2.3           Inappropriate Or Missing Target Profile For Categorical Target

2.4           Target Variable Event Levels Occurring In Different Proportions

2.5           Differences In Misclassification Costs

3            Partitioning The Data

3.1           Misunderstanding The Roles Of The Partitioned Data Sets

3.2           Failing To Consider Changing The Default Partition

4            Choosing The Variables

4.1           Failing To Evaluate The Variables Before Selection

4.2           Using Only One Selection Method

4.3           Misunderstanding Or Ignoring Variable Selection Options

4.3.1      Choosing Settings In The ??2 Mode

4.3.2      Choosing Settings In The R2 Mode

5            Replacing Missing Data

5.1           Failing To Evaluate Imputation Method

5.2           Overlooking Missing Value Indicators

6            Fitting Linear Regression Models

6.1           Overusing Stepwise Regression

6.2           Inaccurately Interpreting The Results

7            Fitting Decision Tree Models

7.1           Ignoring Tree Instability

7.2           Ignoring Tree Limitations

8            Fitting Neural Network Models

8.1           Failing To Do Variable Selection

8.2           Failing To Consider Neural Networks

9            Comparing Fitted Models

9.1           Misinterpreting Lift

9.2           Choosing The Wrong Assessment Statistic

10        Scoring New Data

10.1        Generating Inefficient Score Code

10.2        Ignoring The Model Performance

11        Clustering Your Data

11.1        Building One Cluster Solution

11.2        Including (Many) Categorical Variables

12        Performing Association And Sequence Analysis

12.1        Failing To Sort The Data Set

12.2        Failing To Manage The Number Of Outcomes

Conclusion

References

Acknowledgments

Contact Information

数量金融基本书目(Classic Books for Quantitative Finance Available in China)

 金融计算  数量金融基本书目(Classic Books for Quantitative Finance Available in China)已关闭评论
11月 301999
 

一些有志于数量金融的朋友感叹国内资源不足,花大量时间泡网找电子书。其实这个领域的基本参考书就那么几本,全世界的学者都在用。据我多年泡图书馆和逛书店的经验,不妨给大伙数数国内公开出版的数量金融经典教材,影印版或者中译本,挂一漏万,欢迎随时添加指正(mailto:jiangtanghu(at)gmail(dot)com)。这些书应该都可以从网上书店如china-pub订到,而且单本不会超过一百块。说,材料都容易得到,稀缺的是钻研的耐心。

数量金融的基本书目,无非包括三类,金融、数学和编程(C++)。在金融这块,入门多用John Hull的那本所谓华尔街圣经,Options, Futures, and Other Derivatives(《期权、期货和其他衍生品》),现在都出到第七版了(可怜我手头那本6版还没有看完)。清华大学出版社有这本书的影印版(见过5版,不知道有没有更新的),中译本就比较落后,华夏出版社有3版——那就看影印5版喽。Hull还有一本《期货与期权市场导论》 (第5版),北大出版社的中译本(这个本子较新),数学处理上比前面的“圣经”简单,但对了解领域知识一样有用。

金融数学这块,最好的书国内都引进了(除了Paul Wilmott on Quantitative Finance,北大图书馆跟国图有藏,最新2版三卷本):

Steven Shreve的两卷Stochastic Calculus for Finance,卷一The Binomial Asset Pricing Model和卷二Continuous-Time Models,世界图书出版公司都有影印本,叫做《金融随机分析》。世界图书还有他另外两本名气稍小的影印本子,Methods of Mathematical Finance(《金融数学方法》)和Brownian Motion and Stochastic Calculus(《布朗运动和随机计算》)。都是Springer的精装黄皮本子,比较精致,还便宜。

Salih Neftci的几本,武大出版社也有影印本,不过都是平装的本子,纸张看着不舒服,Principles of Financial Engineering(《金融工程原理》),以及An Introduction to the Mathematics of Financial Derivatives(《金融衍生工具数学导论》)。最后一本西南财经大学出版社也有影印本,叫做《金融衍生工具中的数学》。今年西南财经也引进了几本看着不错的书。

Baxter和Rennie合著的Financial Calculus: An Introduction to Derivative Pricing (Cambridge) ,图灵图书在人民邮电出版社有影印本和中译本,唤作《金融数学—衍生产品定价引论》。图灵做的书都比较漂亮。

最基本的金融数学(随机微积分)参考书,以上已经足够了。其他数学科目,如偏微分、数值分析之类,在数学系的书目里,能选择的就更多了。国内甚至还能找到Paul Glasserman的那本Monte Carlo Methods in Financial Engineering(《金融工程中的蒙特卡罗方法》),高教出版社刚出了一个影印版。

最后一组是编程。一些朋友还在犹豫,是用C好呢,还是Java好?或者,Excel VBA、Matlab似乎也不赖,最近C#也好像挺流行,Python也出了个数值计算的库,R也有金融计算的包rMetrics,S-Plus的FinMetrics看着也不错,——都错!如果你不是学有余力精力过剩的话,C++应该是你唯一的选择。C++是数量金融界的标准语言,而且,即使你工作中不用C++,它也会是企业检验你水平的门槛。C++,全世界的程序员和Quant推荐得最多的就是这三本书,而且国内都有最新的影印本和中译本:Lippman的C++ Primer(人民邮电)、Eckel的Thinking in C++(机械工业)和Bjarne Stroustrup的The C++ Programming Language(《C++程序设计语言》,高教)。

BNF标记法:简介

 Computers and Internet  BNF标记法:简介已关闭评论
11月 301999
 
Backus-Naur Form,巴克斯-诺尔形式

你经常看到类似下面的语法说明:

PROC FREQ < options > ;
BY variables ;
EXACT statistic-options < / computation-options > ;
OUTPUT < OUT=SAS-data-set > options ;
TABLES requests < / options > ;
TEST options ;
WEIGHT variable < / option > ;

这些类似的标记就称作Fackus-Naur Form,简称BNF,是John Backus和Peter Naur为每一种编程语言设计的语法规则标记符号。 这套标记法非常复杂,一般掌握下面的一个超级简化版本就可以了:

 

符号 含义
<> 包含术语,必选项
| 分隔可选项(互斥OR)
[] 可选项
{} 指出至少需要一个必须项
,… 指出可以可选地被重复多次的项目

 

Technorati Tags: , ,

信用评分书目

 未分类  信用评分书目已关闭评论
11月 301999
 
           
        Credit Scoring: Reading List
 
好久不更新,先整理下手头信用评分方面的书。
 
1. Credit Risk Scorecards: Developing and Implementing
Intelligent Credit Scoring, by N.Siddiqi, 2005
这书主要讲是信用评分模型开发的流程,技术方面是点到为止,对了解建模的生命周期非常有好处,作者是SAS公司的信用评分专家。研一时MasterCard的冯老师给我们开信用评分课,从学校图书馆(PKU)借出,印了一册,时常翻着。当时据此书写了不少读书笔记,又有把这书翻译过来的念头。

2. Credit Scoring and Its
Applications, by L.Thomas, etc, 2002
各种(数据挖掘/机器学习)模型的数学展开,恰到好处,还不至于让人望而却步。有中译本(《信用评分及其应用》,中国金融出版社),原版书在数学系(PKU)的图书室。这书稍嫌旧,经典嘛。
3. Development of Credit Scoring Applications Using SAS Enterprise
Miner, by SAS Institute Inc., 2008
信用评分教程,step-by-step,用的是SAS 的数据挖掘工具Enterprise Miner及SAS Credit
Scoring节点。
4. Data Mining Cookbook: Modeling Data for Marketing, Risk and
Customer Relationship management, by O. Rud, 2000
这书在国内也比较有名,它提供了Logistic回归建立以及评估信用评分模型的SAS代码,但国内还没见着随书的数据集。有中译本(《数据挖掘实践》,机械工业出版社)。

5. 信用评分模型技术与应用,by陈建,2005
中文书,对了解业务背景有帮助。作者陈建在Fair Isaac做模型。


6. 现代信用卡管理,by陈建,2005
同上,信用卡业务知识。