机器学习就是把无序的数据转换成有用的信息。
机器学习的主要任务就是分类,通过通过训练数据训练算法,最终可以将实际的数据分到合适的类别中
监督学习算法:预测目标变量的值
k-means算法,线性回归
朴素贝叶斯算法,局部加权线性回归
支持向量机,ridge回归
决策树,lasso最小回归系数估计
无监督学习算法:不需要预测目标变量的值
k-均值,最大期望算法
DBSCAN,parzen窗设计
确定哪种算法之后,还要确定目标变量的类型:
离散型:是/否,1/2/3 分类器算法
连续性:-999~999 回归算法
数据归一化:
为了使得不同纬度的数据大小相似
newValue = oldValue - min / max - min
k-means: http://www.cnblogs.com/zhangchaoyang/articles/2181869.html
一堆测试数据,这些数据,每一行都有相应的分类
后续将输入数据根据测试数据去学习,将输入数据进行分类
计算输入数据集中每个数据与已有分类中心的距离,将样本归到距离最短的中心所在类里,然后将该类中所有点计算平均值,更新中心位置维度数据,反复,知道该中心维度数据不变,或者变化误差小于自定义的误差,则停止,学习结束。
决策树 http://www.cnblogs.com/zhangchaoyang/articles/2196631.html
信息熵:
假如时间A的分类是(A1,A2......AN),每部分发生的概率是(P1,P2.......PN),那信息熵的计算公式如下:
H = -p1logp1-p2logp2-......-pnlogpn
当这件事的不确定性越大,那么要搞清它所需要的信息量也就越大,也就是信息熵越大。
信息熵衡量的是在你知道一个事件的结果后平均会带给你多大的信息量。
如果一个骰子六个面都是1的话,那么它不会给你带来任何新的信息,因为H=-log1 = 0
信息熵计算的是了解这件事所付出的平均信息量。比如32个球队夺冠可能性相同即,pi=1/32,那么信息熵的计算如下:
H = -(1/32)log(1/32)-(1/32log(1/32))-......=5/32+5/32+.......5/32 = 5
所以就需要5个比特的信息量才能搞清它的所有结果。
信息增益:
衡量一个属性区分以上数据样本的能力,信息增益量越大,这个属性作为一棵树的根节点就能使这棵树越简洁
DEMO
NO. , Outlook , Temperature , Humidity , Wind , Play
1 , Sunny , Hot , High , Weak , No
2 , Sunny , Hot , High , Strong , No
3 , Overcast , Hot , High , Weak , Yes
4 , Rain , Mild , High , Weak , Yes
5 , Rain , Cool , Normal , Weak , Yes
6 , Rain , Cool , Normal , Strong , No
7 , Overcast , Cool , Normal , Strong , Yes
8 , Sunny , Mild , High , Weak , No
9 , Sunny , Cool , Normal , Weak , Yes
10 , Rain , Mild , Normal , Weak , Yes
11 , Sunny , Mild , Normal , Strong , Yes
12 , Overcast , Mild , High , Strong , Yes
13 , Overcast , Hot , Normal , Weak , Yes
14 , Rain , Mild , High , Strong , No
1 计算分类系统熵
类别是 是否出去玩。取值为yes的记录有9个,取值为no的有5个,即说这个样本里有9个正例,5 个负例,记为S(9+,5-),S是样本的意思(Sample)。那么P(c1) = 9/14, P(c2) = 5/14
这里熵记为Entropy(S),计算公式为:
Entropy(S)= -(9/14)*log2(9/14)-(5/14)*log2(5/14)用Matlab做数学运算
2 分别以Wind、Humidity、Outlook和Temperature作为根节点,计算其信息增益
我们来计算Wind的信息增益
当Wind固定为Weak时:记录有8条,其中正例6个,负例2个;
同样,取值为Strong的记录6个,正例负例个3个。我们可以计算相应的熵为:
Entropy(Weak)=-(6/8)*log(6/8)-(2/8)*log(2/8)=0.811
Entropy(Strong)=-(3/6)*log(3/6)-(3/6)*log(3/6)=1.0
现在就可以计算出相应的信息增益了:
所以,对于一个Wind属性固定的分类系统的信息量为 (8/14)*Entropy(Weak)+(6/14)*Entropy(Strong)
Gain(Wind)=Entropy(S)-(8/14)*Entropy(Weak)-(6/14)*Entropy(Strong)=0.940-(8/14)*0.811-(6/14)*1.0=0.048
这个公式的奥秘在于,8/14是属性Wind取值为Weak的个数占总记录的比例,同样6/14是其取值为Strong的记录个数与总记录数之比。
同理,如果以Humidity作为根节点:
Entropy(High)=0.985 ; Entropy(Normal)=0.592
Gain(Humidity)=0.940-(7/14)*Entropy(High)-(7/14)*Entropy(Normal)=0.151
以Outlook作为根节点:
Entropy(Sunny)=0.971 ; Entropy(Overcast)=0.0 ; Entropy(Rain)=0.971
Gain(Outlook)=0.940-(5/14)*Entropy(Sunny)-(4/14)*Entropy(Overcast)-(5/14)*Entropy(Rain)=0.247
以Temperature作为根节点:
Entropy(Cool)=0.811 ; Entropy(Hot)=1.0 ; Entropy(Mild)=0.918
Gain(Temperature)=0.940-(4/14)*Entropy(Cool)-(4/14)*Entropy(Hot)-(6/14)*Entropy(Mild)=0.029
这样我们就得到了以上四个属性相应的信息增益值:
Gain(Wind)=0.048 ;Gain(Humidity)=0.151 ; Gain(Outlook)=0.247 ;Gain(Temperature)=0.029
最后按照信息增益最大的原则选Outlook为根节点。子节点重复上面的步骤。这颗树可以是这样的,它读起来就跟你认为的那样:
决策树的关键是如何选定树的根节点,后面依次递归