ML8: 机器学习

机器学习

一、机器学习的过程

特征选择->数据采集->数据清洗->数据划分->模型选择->模型训练->模型测试->模型验证->模型存储->模型应用

二、数据预处理

1.均值移除

将每个特征的平均值设置为0,将标准差设置为1。
sklearn.preprocessing.scale(原始样本矩阵)->处理后的样本矩阵
代码:std.py

2.范围缩放

针对样本矩阵中的每一列(每一个特征)通过线性变换(kx+b)使得该列的最小值和最大值分别变成0和1,其它值结余0和1之间。
sklearn.preprocessing.MinMaxScaler(
feature_range=(目标最小值, 目标最大值))
->范围缩放器
执行范围缩放操作:
范围缩放器.fit_transform(原始样本矩阵)->处理后的样本矩阵
代码:mms.py

3.归一化

针对样本矩阵中的每一行(每一个样本),将其中的元素除以该行所有元素的和,以是各行的元素之和均为1。

sklearn.preprocessing.normalize(原始样本矩阵,
norm=’l1’)->处理后的样本矩阵
l1范数:将向量诸元素按绝对值求和。
l2范数:将向量诸元素按平方求和。
代码:nor.py

4.二值化

根据一个预先设定的阈值,将样本矩阵中所有高于阈值的元素置为1,低于或等于阈值的元素置为0。
sklearn.preprocessing.Binarizer(threshold=阈值)->二值化器
二值化器.transform(原始样本矩阵)->处理后的样本矩阵

5.独热编码

针对样本矩阵中的每一列,根据其值域用若干个0和一个1来编码其中的元素,这样整个样本矩阵就变成一个仅有0和1组成的稀疏矩阵。
1 3 9
7 5 2
1 8 4
7 3 6
1 10 3 100 2 1000
7 01 5 010 4 0100
8 001 6 0010
9 0001
1 0 1 0 0 0 0 0 1
0 1 0 1 0 1 0 0 0
1 0 0 0 1 0 1 0 0
0 1 1 0 0 0 0 1 0
sklearn.preprocessing.OneHotEncoder(
sparse=是否用紧凑格式表示稀疏矩阵, dtype=元素类型)->
独热编码器
独热编码器.fit_transform(原始样本矩阵)->处理后的样本矩阵
代码:ohe.py

6.标记编码

将字符串形式的特征值映射为数字以便数学模型的计算。
sklearn.preprocessing.LabelEncoder()->标记编码器
标记编码器.fit_transform(原始样本矩阵)->处理后的样本矩阵
标记编码器.inverse_transform(处理后的样本矩阵)->原始样本矩阵
代码:lab.py

三、机器学习的基本问题

1.有监督学习

在已知输出的条件下,利用某种数学方法建立输入和输出之间的联系,当出现新的输入时,利用这种联系预测或者判断其所可能产生的输出。
1)回归:输出值是连续数值,用于预测。
2)分类:输出值是离散类别,用于判断。

2.无监督学习

在未知输出的条件下,仅根据输入的相似性利用数学方法进行集群的划分或者的成分提取。
1)聚类:根据输入的相似度进行划分。
2)成分分析:将多个输入在不影响划分效果的前提下降低为较少的输入,降维。
张三,认真听课,按时完成作业,积极回答问题,成绩好
李四,不认真听课,按时完成作业,积极回答问题,成绩较好
王五,不认真听课,不写作业,不回答问题,成绩差
赵六,认真听课,按时完成作业,不回答问题,成绩差
人脸之别:分类

扫描二维码关注公众号,回复: 1508567 查看本文章

四、线性回归

通过一个线性方程建立输入和输出之间的联系。
x -> y
预测函数:h(x) = t0 + t1 x m
成本函数:J(t)=((h(x[i]) - y[i])^2) / 2m
i=1
寻找可以使得成本函数J(t)取得最小值的t,h(x)所表示的预测函数就是线性回归模型。

梯度下降法

h(x) = t0 + t1 x1 + t2 x2 + … + tn xn

计算模型的准确性

平均绝对误差:数据集的真实输出和预测输出的误差绝对值的算术平均数。
sklearn.metrics.mean_absolute_error(真实输出, 预测输出)

->平均绝对误差

均方误差:数据集的真实输出和预测输出的误差平方的算术平均数之平方根。
sklearn.metrics.mean_squared_error(真实输出, 预测输出)

->均方误差

中位数绝对误差:数据集的真实输出和预测输出的误差绝对值的中位数。消除异常误差的干扰,避免样本中的少数坏点影响评估效果。
sklearn.metrics.median_absolute_error(真实输出, 预测输出)->中位数绝对误差

R方得分

综合了各种误差计算方法的结果,通过一个百分比值评估模型的预测性能。该得分越接近于100%越好。
sklearn.metrics.r2_score(真实输出, 预测输出)->R方得分
模型的持久化:pickle.dump()/pickle.load()
代码:line.py、load.py

五、岭回归

线性回归的主要问题在于对异常值敏感。在实际应用中,经常会遇到一些明显错误的样本,会对回归结果产生较大的负面影响。岭回归旨在降低异常样本的权重,削弱其对预测模型的影响。
代码:rdg.py

六、多项式回归

通过在原始参与线性回归的样本基础上,增加高次项,提高模型的复杂度,避免出现欠拟合。
h(x1, x2) = t0 + t1x1 + t2x2 + t3x1^2 + t4x^2 + t5x1x2
代码:poly.py

七、决策树

性别:1-男,0-女
专业:1-文学,2-物理,3-历史,4-化学
学号 性别 专业 -> 类别
1 1 2 1
2 1 1 0
3 0 4 4
4 0 3 2
5 1 4 1

5 1 3 ?

1 1 2 1
2 1 1 0
5 1 4 1
5 1 3 ?

3 0 4 4

4 0 3 2

1 1 2 1
5 1 4 1

2 1 1 0
5 1 3 ?->0

3 0 4 4

4 0 3 2

1.决策树分类/回归算法步骤

1)计算数据集划分前的信息熵;
2)遍历所有未作为划分条件的特征,分别计算根据该特征划分数据后的信息熵;
3)选择可以获得最大信息增益的特征,并使用该特征作为划分依据将数据集划分为若干子集;
4)递归地处理被划分后的所有子数据集,从未被选择的特征中寻找最优的划分特征来划分出更小的子集;
5)以上递归过程的终止条件通常可以选择以下两个:
A.所有的特征都用过了,即没有新的特征可以作为继续划分的依据了;
B.划分后产生的信息增益已经足够小,或者已小于实现设定的增益阈值。
6)对于新的输入数据,按照模型中决策树每个节点的划分依据,将该样本归属到相应的子集中,直到该样本出现在某个特定的叶节点中,该样本的输出由此节点各样本的输出经过投票(分类)
或取均值(回归)确定。
说明:对于连续值的特征,可以在数据预处理阶段根据业务的需要人为划分为若干区段,这个过程被称为离散化。

2.算法优化

1)前剪枝
在划分前根据信息增益是否足够小,决策树是否足够高,待划分子集样本是否足够少等条件,决定是否可以提前终止划分迭代,以避免因模型过于复杂导致过拟合。
2)后剪枝
在决策树构建完成以后,自底向上,从生成的子树中寻找可以合并的依据,用子树的根节点代替这棵子树,以此简化数学模型,防止过拟合。

3.集合算法

根据统计学原理将多棵决策树的预测结果通过投票或者平均的方法,消除单棵决策树对特殊特征及样本的倾向性。
1)自助聚合:从n个训练样本中随机抽取m个,创建模型,重复这个过程B次,得到B个模型,针对每个待预测的样本,有B个模型得到B个预测值,通过投票或平均得到相应的输出。
2)正向激励:为每个训练样本分配初始权重,建立模型,增加预测错误样本权重,再建立模型,重复这个过程,得到B个模型…越晚建立的模型权重越高,在后续投票或平均的过程中体现出模型权重的差别。
3)随机森林:在自助聚合的基础上,每个构建决策树的时候,随机选择部分特征,以消除较强特征对预测结果的影响。
代码:house.py

八、特征的相对重要性

1.学习模型对象的feature_importances_属性,表示各个特征的相对重要性。不同的模型针对特征所认为的重要性不尽相同,但应该大体符合实际业务逻辑。
2.有学习模型输出的特征相对重要性与算法和特征集紧密相关,从不同的算法模型或特征集合中可能会得出完全不同的重要性排列。
代码:imp.py、bike.py

九、简单分类器

对于可以人工方法找到的分类依据就没有必要使用数学模型完成分类,换言之自己编写的代码逻辑就已经体现分类模型的效果。
代码:simple.py

十、逻辑分类器

猜你喜欢

转载自blog.csdn.net/weixin_38246633/article/details/80588526