目录

8-4 为什么要训练数据集与测试数据集

为什么使用测试数据集

过拟合

train test split的意义

8-5 学习曲线05-Learning-Curve

8-6 验证数据集与交叉验证

使用交叉验证

回顾网格搜索

cv参数

留一法Loo-CV


8-4 为什么要训练数据集与测试数据集

为什么使用测试数据集

过拟合

模型的泛化能力差

from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScalerdef PolynomialRegression(degree):return Pipeline([("poly", PolynomialFeatures(degree=degree)),("std_scaler", StandardScaler()),("lin_reg", LinearRegression())])
from sklearn.metrics import mean_squared_errorpoly100_reg = PolynomialRegression(degree=100)
poly100_reg.fit(X, y)y100_predict = poly100_reg.predict(X)
mean_squared_error(y, y100_predict)

机器学习主要解决的是过拟合的问题

模型能力太差,不是为了完全拟合这些数据,应该是模型的泛化能力

train test split的意义

二阶的模型比一阶的模型泛化能力要强

10阶时变小,泛化能力下降了,100时就更明显了

模型复杂度对于不对算法含义不同

knn是k , 多项式回归是n,

对于训练数据就复杂高则准确率会高,但对测试数据就不一样了

过拟合到欠拟合的过程

欠不能表达数据的关系

有眼睛的都是猫或狗,则模型是欠拟合的

毛发是黄色则为过拟合的,太细节的标准做为判断标准

之前的网格搜索一直就是这么干的

8-5 学习曲线05-Learning-Curve

学习曲线

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_errortrain_score = []
test_score = []
for i in range(1, 76):lin_reg = LinearRegression()lin_reg.fit(X_train[:i], y_train[:i])y_train_predict = lin_reg.predict(X_train[:i])train_score.append(mean_squared_error(y_train[:i], y_train_predict))y_test_predict = lin_reg.predict(X_test)test_score.append(mean_squared_error(y_test, y_test_predict))plt.plot([i for i in range(1, 76)], np.sqrt(train_score), label="train")
plt.plot([i for i in range(1, 76)], np.sqrt(test_score), label="test")
plt.legend()
plt.show()

def plot_learning_curve(algo, X_train, X_test, y_train, y_test):train_score = []test_score = []for i in range(1, len(X_train)+1):algo.fit(X_train[:i], y_train[:i])y_train_predict = algo.predict(X_train[:i])train_score.append(mean_squared_error(y_train[:i], y_train_predict))y_test_predict = algo.predict(X_test)test_score.append(mean_squared_error(y_test, y_test_predict))plt.plot([i for i in range(1, len(X_train)+1)], np.sqrt(train_score), label="train")plt.plot([i for i in range(1, len(X_train)+1)], np.sqrt(test_score), label="test")plt.legend()plt.axis([0, len(X_train)+1, 0, 4])plt.show()plot_learning_curve(LinearRegression(), X_train, X_test, y_train, y_test)

from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipelinedef PolynomialRegression(degree):return Pipeline([("poly", PolynomialFeatures(degree=degree)),("std_scaler", StandardScaler()),("lin_reg", LinearRegression())])poly2_reg = PolynomialRegression(degree=2)
plot_learning_curve(poly2_reg, X_train, X_test, y_train, y_test)

稳定后两者的间距很大,这样通常就是过拟合的情况,泛化能力 不够

欠拟合训练数据上大

训练的上小,但测试的上大,两者的间距也大

8-6 验证数据集与交叉验证

的训练数据集上误差很好,但测试上不好

所以将数据集分开

这样肯定比只用全为训练数据要好

有了模型后,通过测试数据上效率最好,调试参数,模型在围绕着测试数据集打转,有可能在测试数据集上过拟合

找到训练的模型在已知测试数据集 上过拟合,如通过将数据分为三部分解决

训练好后,模型给验证数据,找到验证数据的好参数模型

测试数据没有用过,完全不知的

这时的问题是随机,数据集的分割,如果有特殊的数据直接影响模型的结果

为了解决这个问题就是交叉验证

把数据分为k分,比如三分

每一个会有一个模型参数,求匀值

from sklearn.neighbors import KNeighborsClassifierbest_k, best_p, best_score = 0, 0, 0
for k in range(2, 11):for p in range(1, 6):knn_clf = KNeighborsClassifier(weights="distance", n_neighbors=k, p=p)knn_clf.fit(X_train, y_train)score = knn_clf.score(X_test, y_test)if score > best_score:best_k, best_p, best_score = k, p, scoreprint("Best K =", best_k)
print("Best P =", best_p)
print("Best Score =", best_score)

使用交叉验证

默认分为三分,自己实现时先可以用随机的方法来分割数据

best_k, best_p, best_score = 0, 0, 0
for k in range(2, 11):for p in range(1, 6):knn_clf = KNeighborsClassifier(weights="distance", n_neighbors=k, p=p)scores = cross_val_score(knn_clf, X_train, y_train)score = np.mean(scores)if score > best_score:best_k, best_p, best_score = k, p, scoreprint("Best K =", best_k)
print("Best P =", best_p)
print("Best Score =", best_score)

交叉验证和  结果不一样

可能交叉验证的结果要好,1,因为这可能是  中过拟合test数据集的结构  2,分数低,因为它不过拟合数据一般

交叉验证是为了得到最佳的k和p,然后就能有自己的最好的分类器

回顾网格搜索

默认分为三分,i为9种可能,p为5种可能,即45*3= 135个模型的结果

用三交叉验证的方式得到的结果,用了完全模型没用的数据来衡量模型

from sklearn.model_selection import GridSearchCVparam_grid = [{'weights': ['distance'],'n_neighbors': [i for i in range(2, 11)], 'p': [i for i in range(1, 6)]}
]grid_search = GridSearchCV(knn_clf, param_grid, verbose=1)
grid_search.fit(X_train, y_train)

cv参数

把数据分为几分通过CV来决定

留一法Loo-CV

第8章 多项式回归与模型泛化 学习笔记中相关推荐

  1. 第8章 多项式回归与模型泛化

    问题:线性回归要求假设我们的数据背后存在线性关系: , 如果将x的平方理解成一个特征,x理解成另一个特征:本来只有一个特征x,现在看成有两个特征的数据集,多了一个特征,就是x的平方,其实式子本身依然是 ...

  2. HTML5 权威指南第 10 章 文档分节 学习笔记

    HTML5 权威指南第 10 章 文档分节 学习笔记 第 8 章 标记文字 内容从从文字出发,专注如何将单体内容正确的呈现出来:第 9 章 组织内容 内容从段落出发,专注如何将单体内容合理的放在段落中 ...

  3. 【14天鸿蒙设备开发实战-第七章 设备联网上云 学习笔记】

    14天鸿蒙设备开发实战-第七章 设备联网上云 学习笔记 一.开发环境.平台与硬件需求 二.华为IoT平台API 2.1 初始化 2.1.1 设备信息初始化 2.1.2 华为IoT平台 初始化 2.1. ...

  4. MATLAB simulink 模型验证学习笔记

    MATLAB simulink 模型验证学习笔记 一.静态验证 1.Model Advisor 模型验证意思是用matlab自带的规范检查工具来检查自己画的模型是否符合规范. 进行模型验证需要用到的模 ...

  5. 网规第二版:第8章 网络规划与设计论文学习笔记(含历年真题)(完结)

    第8章 网络规划与设计论文学习笔记 8.1写作范围要求 1.网络技术应用与对比分析 2.网络技术对应用系统建设的影响 3.专用网络需求分析.设计.实施和项目管理 4.下一代网络技术分析 8.2论文考试 ...

  6. 《C++Primer》第二章-变量和基本类型-学习笔记(1)

    <C++Primer>第二章-变量和基本类型-学习笔记(1) 文章目录 <C++Primer>第二章-变量和基本类型-学习笔记(1) 摘要 主体 基本(内置)类型 算数类型 整 ...

  7. 【ember zigbee】序章:协议栈相关文档学习笔记

    原文地址:https://blog.csdn.net/tainjau/article/details/90648114 文章目录 写在前面 一.材料出处 二.文档解析 2.1.EZSP Protoco ...

  8. MPC模型预测控制学习笔记-2021.10.27

    MPC模型预测控制学习笔记-点击目录就可以跳转 1. 笔者介绍 2. 参考资料 3. MPC分类 4. 数据的标准化与归一化 5. MATLAB-MPC学习笔记 5.1 获取测试信号:gensig( ...

  9. Elasticsearch7学习笔记(中)

    Elasticsearch是实时全文搜索和分析引擎,提供搜集.分析.存储数据三大功能:是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统.它构建于Apache Lucene ...

  10. 多项式回归与模型泛化

    1.多项式回归 线性回归的局限性是只能应用于存在线性关系的数据中,但是在实际生活中,很多数据之间是非线性关系,虽然也可以用线性回归拟合非线性回归,但是效果会变差,这时候就需要对线性回归模型进行改进,使 ...

最新文章

  1. JS 新浪下拉菜单+jQuery
  2. 【Python】如何在Windows操作系统下安装Python和Networkx
  3. mysql 用一条sql语句修改两个表里的内容,一条sql语句update更新两个表
  4. 使用cloudera manager安装Hive服务【详细步骤】
  5. 03.elasticsearch_index操作
  6. C# Repeater根据条件后台设置前台行背景色
  7. pdf转换成word教程
  8. 美团买菜:采购量提升至平时3-4倍 提供无接触配送服务
  9. crontab命令 :Linux下定时执行脚本
  10. 35张动图:关于机房空调水冷系统和风冷系统
  11. Java开发手册(嵩山版)
  12. redmibook pro 14 arch linux alsamixer 检测不到声卡
  13. dcn网络与公网_DCN网络安全
  14. 企业级shel高级l常用命令
  15. java批量下载图片并打包成zip文件
  16. bzoj1189: [HNOI2007]紧急疏散evacuate
  17. DirectShow入门
  18. 八年级作文-面对天空
  19. Android模拟自由落体运动
  20. 洛谷 小木棍(暴力+剪剪剪剪枝)

热门文章

  1. 人工智能称霸围棋,吾感觉不可思议
  2. Linux的syscall源码,Linux内核跟踪之syscall tracer
  3. windows VC++获取磁盘名称和序列号
  4. linux5分钟打印一次的脚本,centos7中crontab定时计划任务5分钟一次命令写法
  5. kafka php 教程,php 使用kafka
  6. jqgrid dataevents change 只触发一次_王者荣耀:最难触发的4个被动,张飞上榜,他:我太难了!...
  7. 同步和异步的区别_LED显示屏的同步控制卡和异步控制卡是什么?它们的区别在哪里?...
  8. mysql分组去掉重复记录_MYSQL中GROUP分组去除重复数据
  9. vgh电压高了有什么_能源网建设的风电高电压穿越测试有何作用
  10. 狂打气球html5游戏_4399h5游戏_企业团建活动小游戏:合力吹气球