目录
目前,已掌握了机器学习中的一些主流的技术。
一、本章内容
1.1 6个任务
二、欠拟合与过拟合
2.1 对于回归任务
右图:二项式回归。good fit
相对于上图中的good fit,下图中:
- 左边的是under fit:线性回归(一项式回归),准确率很低。
- 右边的是over fit:五项式回归。对旧训练数据的拟合极精准,但是对新测试数据很不准确。(甚至不符合实际规律,因为真实的酶的活性,会随着温度升高逐渐增强,达到一个peak后,会逐渐减弱。)
2.2 对于分类任务
数据的维度:2维。
2.3 欠拟合 under fit、过拟合 over fit
一般,欠拟合,容易发现:因为训练数据时就能发现了。
但是,比较难发现的是:过拟合。因为训练数据时,是不能发现的。
我的理解:
训练数据的准确率,并不是绝对的越高越好。
2.4 如何解决过拟合问题:简化模型、PCA降维、增加正则项
1.三个办法
2.数据PCA处理,解决过拟合问题:
3.增加正则项,来解决过拟合问题
线性回归的目标:
是最小化损失函数。即,预测数据点,与实际数据点,的距离之和,是最小化的。
下图是逻辑回归的损失函数:
图示:
我的问题:
这里的
入
的具体含义是什么。是不是它的本质,也是跟方式二的PCA一样降低维度?因为正则项是二项式(平方)。
2.5 知识巩固
不正确。
因为我们机器学习建立模型的目的,不是让训练数据的模拟有多么的准确,而是要让新的测试数据的预测更加准确。
有一种情况是:你输入了所有的属性进行训练,训练数据的准确度很准,但是训练数据却意外的不准、出现很多的误判。这种常见的现象,就是过拟合over fit。
三、数据分离、误差矩阵 Confusion Matrix
3.1 机器学习的核心目的:不是对训练数据的高准确率,而是对新测试数据的预测的高准确率
机器学习的核心目的:不是对训练数据的高准确率,而是对新测试数据的预测的高准确率。
3.2 数据分离:解决没有新的测试数据的问题
3.3 使用准确率进行模型评估的局限性(重):无法反映细节信息:体现不出数据预测的实际分布、错误预测的类型
3.4 误差矩阵 Confusion Matrix
3.5 更丰富的模型评估指标:+4个:召回率 Recall、特异度 Specificity 、精确率 Precision、F1分数 F1 Score
1.
2.
举个例子:
下图这个表,不太会填写?
异常交易的检测:
特点是:只要有一个异常交易,那么银行就会损失惨重。输不起。
基于这个特点,就推出:一定要把所有的异常交易给找出来。即使误判(错杀),即允许正常交易,被误判为异常交易。
即正常交易中,不能有异常交易。即特异度要尽可能的高。
3.6 课后题
四、模型优化
4.1 拿到训练数据时,会有的三个问题
大家都做机器学习,那么你能不能做的比别人好?
区别是:提高模型表现。即相同的数据下,你的模型训练的更好。
4.2 提高模型表现:数据的质量,决定模型表现的上限
- 比如说,身体质量指数,只需要身高、体重两个参数即可。那么,其他的数据,比如姓名等数据,就是没有必要的。
具体的操作为:
- 前三项:是针对数据本身
- 后一项:确定了数据之后,针对的是模型
4.3 拿到数据的第一时间,考虑的四个问题
拿到数据的第一时间,可以考虑以下几个问题:
1.是否需要删除异常数据?
2.数据的量级差异如何?
两个数据的范围:是差不多的。所以,可以直接拿来用 。不用再归一化。
3.数据维度,是否可以减少?
4.尝试不同的模型
尝试了三个不同的模型,其效果都还可以。那就使用knn k近邻模型,来举例。
4.4 模型优化:三个方面
其中:
尝试不同的 n_neighbors值:
knn模型,对于n_neighbors ,从大往小看(即从右往左看):
- 训练数据,是越来越准确。------------------- 单调递增
- 测试数据,是越来越准确再不准确。--------递增再递减
4.5 课后题
五、实战准备
5.1 实战1:酶的活性预测,核心代码
- 原始数据的x轴,是比较稀疏的、不会遍历上所有的点的。所以,需要自己生成一个这样的数据集:x轴。
reshape(-1, 1)
指的是,调整为若干行、1列的数组。
- 这里就不是线性回归了,而是多(二)项式回归。Polynomial指的是多项式。
- degree指的是生成的最高次项是几次的。这里的最高次项是2次方。
- fit_transform只需要用一次即可。后续用transform就会调用相同的转换方式。(这个我不太理解)
5.2 实战2:芯片的质量好坏的预测,核心代码
1.数据分离
- random_state指的是随机的排序。每次取的时候,是一样的顺序。
- test_size指的是训练数据集与测试数据集的比例。假设是10个样本,那么测试数据就是4个样本。
2.如何形成橙蓝边界:
- 以前,分类的方式是求解这个边界曲线的方程。根据每个x,就能得到对应的y的数值。
- 现在,更方便的方式:先建立模型,训练完。然后遍历输入数据里的所有的组合。然后,将这些组合,都放进模型中进行预测。根据这个预测结果,来判断这个分类是0还是1。然后根据这个0还是1,就画在上面。一些密密麻麻的点,肉眼看不见,但是能看到是一些区域。这样,就能形成一个可视化分类的效果了。
- 200行*200列,的矩阵,即数据点云。然后,将其转换成array的格式。最终,生成整个区域的数据。
- 接着,就是生成橙蓝边界:蓝色是bad_knn,橙色是good_knn。
3.误差矩阵
六、实战1:酶的活性预测,回归任务
6.1 任务:4个
酶活性预测实战task:
1.基于T-R-train.csv数据集,建立线性回归模型,计算其在T-R-test.csv数据集上的r2分数,可视化模型预测结果。
2.加入多项式特征(2次、5次),建立回归模型。
3.计算多项式回归模型对测试数据进行预测的r2分数,判断哪个模型的预测的更准确
4.可视化这个多项式回归模型的数据预测结果,判断哪个模型的预测更准确
6.2 task1: 基于T-R-train.csv数据集,建立线性回归模型,计算其在T-R-test.csv数据集上的r2分数,可视化模型预测结果
1.
已存放在电脑本地目录:
在电脑本地目录里找到,并用Excel软件查看下该csv文件:
2.对于训练数据
原数据的分布情况,即散点图,原来长这样:
将Pandas库中的series序列,----- 跟dataframe一样,本质上是对表格数据的处理。---- 能用于散点图等可视化图
转换为Numpy库中的array。------ 是一个数学库,用于处理数组形式的数学运算。------- 能用于模型训练。
我的问题:
这里的y_train也是一个pandas库中的series数据结构。难道它不需要向左边的自变量一样,通过转换成array来调整维度吗?
3.对于测试数据
看一下r2分数:与1不接近,甚至距离很远。说明模型的效果很差。
可视化验证下:
确实是一条直线:
6.3 task2: 加入多项式特征(2次、5次),建立回归模型
6.4 task3: 计算多项式回归模型对测试数据进行预测的r2分数,判断哪个模型的预测的更准确
6.5 task4: 可视化这个多项式回归模型的数据预测结果,判断哪个模型的预测更准确
(一)二项式的特征
1.generate new features(本质就是一些abc系数的数据集)
发现:以前的X_train是一列。
但是,这里的多项式特征数据:X_2_train是三列:因为有个常数项、x的一次方、x的二次方这三个。
2.train the model
3.make prediction on the training data and testing data
4.generate new data
结果:r2分数,非常好。因为非常接近1.
5.visualize
上图中,最小值是40,最大值是90,一共生成300个点。然后,再转换成300行、1列的array。(方便模型训练、可视化图)
可视化验证下:效果特别好。
我的问题:
为什么在原始数据得到的散点图之外,拟合的回归曲线,也能同时在该图上一起显示呢?
因为拟合的回归曲线,在自变量设置时,就已考虑了原散点图自变量的范围,他俩是一致的。
即上面的
X_2_range
变量。
(二)五项式的特征
再编写以下多项式(5次)的。
自定义一个多项式特征的对象,最高次项为5:
fit_transform只需要在第一次调用的时候使用即可,因为它会自动的进行一次fit,来得到对应的转换关系。第二次就不再需要了。
lr5模型的入参是:经过多项式特征对象,改造后的自变量X_5_train
。
结果:
训练集,准确度非常高,但是测试集却只有0.54,比较低。
可视化验证下:
确实是对橙色的测试集,预测不准确。
七、实战2:芯片的质量好坏的预测,分类任务
7.1 任务:6个
7.2 task1: 基于data_class_raw.csv数据集,根据高斯分布概率密度函数,寻找异常点并剔除
任务:
1.基于data_class_raw.csv数据集,根据高斯分布概率密度函数,寻找异常点并剔除
2.基于data_class_processed.csv数据集,进行pca分析,确定重要数据维度及成分
3.完成数据分离,数据分离参数:random_state = 4, test_size = 0.4
4.建立KNN模型完成分类,n_neighbors取10, 计算分类准确率,可视化分类边界
5.计算测试数据集,对应的混淆矩阵,计算准确率、召回率、特异度、精确率、F1分数
6.尝试不同的n_neighbors(1-20),计算其在训练数据集、测试数据集上的准确率,并做图
1.
数据集如下:
2.
最终,找到这些异常点之后,直接在excel中对其进行删除即可;
7.3 task2: 基于data_class_processed.csv数据集,进行pca分析,确定重要数据维度及成分
1.
这是已经处理过异常点之后的数据集:
2.
标准差:这两个都算比较大。
可视化检验下:
确实这两个维度的都很大,都是主成分。是没有必要再去降维的。
7.4 task3: 完成数据分离,数据分离参数:random_state = 4, test_size = 0.4
原始数据,就被拆分成了两个部分:训练集、测试集。其中,测试集的占比是40%。
7.5 task4: 建立KNN模型完成分类,n_neighbors取10, 计算分类准确率,可视化分类边界
之前,做过了KNN模型。但是,可视化分类边界,比较重要需要练习下。
1.
针对训练数据集,建立knn模型。
查看下准确率,结果:
- 训练数据,95%左右,很准。
- 但是,测试数据,只有64%,比较不准。
2.
查看下原来的数据范围,是从0-10之间。所以:
x、y轴两个方向,都自定义这个区间;
这里的40000,指的是200*200:
这里的预测,指的是所有区域的所有点的情况,都已预测完成:
3.
结果:
红色、绿色,是原来的好数据、坏数据。
蓝色橙色边界,其实是决策边界。
7.6 task5: 计算测试数据集,对应的混淆矩阵,计算准确率、召回率、特异度、精确率、F1分数
1.准备
2.
准确率:整体样本中,预测正确样本数的比例。
- Accuracy = (TP + TN)/(TP + TN + FP + FN)
灵敏度(召回率):正样本中,预测正确的比例。
- Sensitivity = Recall = (TP)/(TP + FN)
这两个指标,差不了太多。说明,样本的代表性,比较好。
3.
特异度:负样本中,预测正确的比例
- Specificity = TN/(TN + FP)
精确率:预测结果为正的样本中,预测正确的比例。
- Precision = (TP)/(TP + FP)
F1分数:综合Precision和Recall的一个判断指标
- F1 Score = 2 Precision Recall / (Precision + Recall)
发现,上述的这些指标,大都在60%-70%之间。还是比较均匀的。
7.7 task6: 尝试不同的n_neighbors(1-20),计算其在训练数据集、测试数据集上的准确率,并做图
1.
遍历不同的k数值,建立对应的knn模型:
2.
结果:
发现这个n数值,并不是越大越好。而是一个中间合适的数值。比如6-12之间。
Comments | NOTHING