机器学习 基本算法 (1(knn ,Decision Tree,random forest

本文深入浅出地介绍了机器学习中的几种基础算法,包括k近邻算法(KNN)、决策树(Decision Tree)及随机森林(Random Forest),并详细探讨了它们的工作原理、应用场景及优缺点。

把knn放进来是 knn太短了 直接加上就行了
数和森林可以参考这个
https://www.analyticsvidhya.com/blog/2016/04/complete-tutorial-tree-based-modeling-scratch-in-python/

knn

好邻居法 用最近的k的邻居来表示它的特征 一般用于分类
用一个距离函数 找出已知数据中距离未知事件最近的k个数据,最后按照这k个数据里出现最多的 表示该数据。
代码

from sklearn.neighbors import KNeighborsClassifier
#X,y training dataset ,x_test test dataset
KNeighborsClassifier(n_neighbors=6) # 默认n为5
model.fit(X, y) #训练模型
predicted= model.predict(x_test) #输出预测

Decision Tree

决策树效果很好 可以做non-linear 分类、回归都好用

专有名词
Root Node: 根节点
Splitting: 把节点 2分 3分还是几分
Decision Node: 能够分裂的节点
Leaf/ Terminal Node: 不能继续分裂
Pruning:砍树 去掉子节点 降低树高

这里写图片描述
小孩玩棒球 树有多种分法 怎么分最重要

怎样 splitting ? 就像对小孩玩棒球 在3种中 怎么选最好的

1Gini Index

Gini index says, if we select two items from a population at random then they must be of same class and probability for this is 1 if population is pure.

就是分的 2个items 要在同一个 class下 如果是纯的(纯度100%) 就是1

1、作用于明确变量 0,1
2、必须2分
3、gini值越高 homogeneity(同质性,差不多就是纯度)越高
4、CART 是 Gini method 一个运用

如何计算gini splitting

1、Calculate Gini for sub-nodes, using formula sum of square of probability for success and failure (p^2+q^2).
    计算gini  子节点 sum (成功^2+失败^2)   #就计算 平方纯度
2、Calculate Gini for split using weighted Gini score of each node of that split
    计算gini  对分割的 用带权重的gini分数 对每一个所分节点

以小孩玩棒球为例
这里写图片描述
找到哪个spilt 更加homogeneous(就是更纯)

gender:

gini 下的子节点 female = (0.2)(0.2)+(0.8)(0.8)=0.68
gini下的子节点Male = (0.65)(0.65)+(0.35)(0.35)=0.55
带权重的 split= (10/30)*0.68+(20/30)*0.55 = 0.59 (权重w就是 30个学生人数所占比例)

class:

Class IX = (0.43)(0.43)+(0.57)(0.57)=0.51
Class X = (0.56)(0.56)+(0.44)(0.44)=0.51
带权重的 split = (14/30)*0.51+(16/30)*0.51 = 0.51

可以看出 gender分数 > class分数 用gender分好 这个分数就是纯度gender分的更纯

2、Chi-Square (就是卡方检验)
找出 父、子节点的差异 用平方标准差 算出观测的 和期望的 发生率的差异

1、作用于变量 1,0 (success failure)
2、可用于 2分或更多分
3、高的分数 表示 父子差异大
4、Chi-Square 对每个节点计算用公式
5、Chi-square = ((Actual – Expected)^2 / Expected)^1/2
6、CHAID 树

如何计算

1、Calculate Chi-square for individual node by calculating the deviation for Success and Failure both
    计算每个节点的 对0,1的偏差 卡方   
    #就是((Actual -Expected)^2 / Expected)^1/2
2、Calculated Chi-square of Split using Sum of all Chi-square of success and Failure of each node of the split
    sum (所有的节点的 0,1的卡方)

以小孩玩棒球为例

gender:

这里写图片描述
期望值是 5 因为父节点是50%可能性
, Actual – Expected
“Play Cricket” (2 – 5 = -3) “Not play cricket” ( 8 – 5 = 3).
((Actual – Expected)^2 / Expected)^1/2.
在都加起来

class:

这里写图片描述
差不多意思

5,5开应该是最差的 所以 分数越大越好 Gender 更好

3、Information Gain:
就是单纯套该公式
l(x) = -log p(x)
H = ∑p(x)l(x)
信息增益H 越小越好 (就是5,5开是最差的)
过程例子

Entropy for parent node = -(15/30) log2 (15/30) – (15/30) log2 (15/30) = 1  # 1最差
Female node = -(2/10) log2 (2/10) – (8/10) log2 (8/10) = 0.72 
male node,  -(13/20) log2 (13/20) – (7/20) log2 (7/20) = 0.93
Entropy for split Gender = Weighted entropy of = (10/30)*0.72 + (20/30)*0.93 = 0.86
Class IX node, -(6/14) log2 (6/14) – (8/14) log2 (8/14) = 0.99 
Class X node,  -(9/16) log2 (9/16) – (7/16) log2 (7/16) = 0.99.
Entropy for split Class =  (14/30)*0.99 + (16/30)*0.99 = 0.99

4、Reduction in Variance
用于回归问题 用标准方差做分裂 值越小越好
这里写图片描述

处理overfitting

不处理会生成 完全长成树 100%正确但会overfit

处理方法 1、限制树的大小
2、砍树

1、限制树的大小
这里写图片描述

1、 节点分裂的最小样本(Minimum samples for a node split)
2、节点分裂的最少叶子样本(Minimum samples for a terminal node (leaf))
3、树深 (Maximum depth of tree (vertical depth))
4、叶子最多数目(Maximum number of terminal nodes)
5、最多特征数(Maximum features to consider for split)

2、砍树
一种贪婪算法 一边砍树 一边要求纯度最好
就像汽车行驶
这里写图片描述
可以选择在小车道 也可以选择在大车后
开车的人一般选择 先去大车道超车 ,在加塞的小车道了

砍树就像加塞 提前去做某些工作
步骤:
1、先让树很深
2、从底部开始 删除叶子 给我们负收益的
3、假设收益 -10 但下一个spilt 给我们 +20收益 这样 就得到了+10

代码

#Import other necessary libraries like pandas, numpy...
from sklearn import tree

#X,y training dataset ,x_test test dataset
# 建树
model = tree.DecisionTreeClassifier(criterion='gini') # 用gini分树 默认gini
# model = tree.DecisionTreeRegressor()  ###regression

model.fit(X, y)
model.score(X, y)
#训练模型 给分

predicted= model.predict(x_test)
#预测

Random Forest

“万能灵药” 不知道用什么 用它就对了
对 分类 票数最多的就是结果
对 回归 票数平均就是结果

1.如果训练集中有N种类别,则有随机地放回 选取N个样本。这些样本将组成培养决策树的训练集。
2.如果有M个特征变量,那么选取数m < M,从而在每个节点上随机选取m个特征变量来分割该节点。再在m个中选出最佳spitting。m值在整个建森林过程中保持不变。
3.每个决策树都最大程度上进行分割,没有剪枝。

这里写图片描述

Random Forest 优势

1、用于 分类 回归都可以
2、可处理 大数量集 在高维度下 可以降维(dimensionality reduction method) 可输出每个维度的重要性 方便
这里写图片描述
3、可作用于 数据丢失
4、对数据中的错误 可以有平衡作用
5、上述作用 可用于无监督学习中
5、在建森林的过程中 自带一笔 dataset 可以用于 testing 就是 差不多是三分之1 这样 ,就是因为 每次 一个单词没 选到的 概率 是 n1n
那么最终 如果这个单词没选到 概率就是 (n1n)n=(11+(1n1)n)=1e
这些就是out of bag 样品
这些样品可以用来做test

代码


from sklearn.ensemble import RandomForestClassifier 
#use RandomForestRegressor for regression problem

#X,y training dataset ,x_test test dataset

# 建森林
model= RandomForestClassifier(n_estimators=1000)
#训练
model.fit(X, y)
#输出
predicted= model.predict(x_test)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值