本教程的知识点为:机器学习算法定位、 K-近邻算法 1.4 k值的选择 1 K值选择说明 1.6 案例:鸢尾花种类预测–数据集介绍 1 案例:鸢尾花种类预测 1.8 案例:鸢尾花种类预测—流程实现 1 再识K-近邻算法API 1.11 案例2:预测facebook签到位置 1 项目描述 线性回归 2.3 数学:求导 1 常见函数的导数 线性回归 2.5 梯度下降方法介绍 1 详解梯度下降算法 线性回归 2.6 线性回归api再介绍 小结 线性回归 2.9 正则化线性模型 1 Ridge Regression (岭回归,又名 Tikhonov regularization) 逻辑回归 3.3 案例:癌症分类预测-良/恶性乳腺癌肿瘤预测 1 背景介绍 决策树算法 4.2 决策树分类原理 1 熵 决策树算法 4.3 cart剪枝 1 为什么要剪枝 决策树算法 4.4 特征工程-特征提取 1 特征提取 决策树算法 4.5 决策树算法api 4.6 案例:泰坦尼克号乘客生存预测 集成学习基础 5.1 集成学习算法简介 1 什么是集成学习 2 复习:机器学习的两个核心任务 集成学习基础 5.3 otto案例介绍 – Otto Group Product Classification Challenge 1.背景介绍 2.数据集介绍 3.评分标准 集成学习基础 5.5 GBDT介绍 1 Decision Tree:CART回归树 1.1 回归树生成算法(复习) 聚类算法 6.1 聚类算法简介 1 认识聚类算法 聚类算法 6.5 算法优化 1 Canopy算法配合初始聚类 聚类算法 6.7 案例:探究用户对物品类别的喜好细分 1 需求 第一章知识补充:再议数据分割 1 留出法 2 交叉验证法 KFold和StratifiedKFold 3 自助法 正规方程的另一种推导方式 1.损失表示方式 2.另一种推导方式 梯度下降法算法比较和进一步优化 1 算法比较 2 梯度下降优化算法 第二章知识补充: 多项式回归 1 多项式回归的一般形式 维灾难 1 什么是维灾难 2 维数灾难与过拟合 第三章补充内容:分类中解决类别不平衡问题 1 类别不平衡数据集基本介绍 向量与矩阵的范数 1.向量的范数 2.矩阵的范数 如何理解无偏估计?无偏估计有什么用? 1.如何理解无偏估计
完整笔记代码请移步:
博客文章1: https://blog.51cto.com/u_16958431/11773528
博客文章2: https://blog.51cto.com/u_16958431/11767580
博客文章3: https://blog.51cto.com/u_16958431/11741924
感兴趣的小伙伴可以自取哦~
全套教程部分目录:
部分文件图片:
K-近邻算法
学习目标
- 掌握K-近邻算法实现过程
- 知道K-近邻算法的距离公式
- 知道K-近邻算法的超参数K值以及取值问题
- 知道kd树实现搜索的过程
- 应用KNeighborsClassifier实现分类
- 知道K-近邻算法的优缺点
- 知道交叉验证实现过程
- 知道超参数搜索过程
- 应用GridSearchCV实现算法参数的调优
1.8 案例:鸢尾花种类预测—流程实现
学习目标
-
目标
- 知道KNeighborsClassifier的用法
1 再识K-近邻算法API
-
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
-
n_neighbors:
- int,可选(默认= 5),k_neighbors查询默认使用的邻居数
-
algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’}
-
快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索,
- brute是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时。
- kd_tree,构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。
- ball tree是为了克服kd树高维失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。
-
-
2 案例:鸢尾花种类预测
2.1 数据集介绍
Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。关于数据集的具体介绍:
2.2 步骤分析
- 1.获取数据集
- 2.数据基本处理
- 3.特征工程
- 4.机器学习(模型训练)
- 5.模型评估
2.3 代码过程
- 导入模块
- 先从sklearn当中获取数据集,然后进行数据集的分割
-
进行数据标准化
- 特征值的标准化
- 模型进行训练预测
3 案例小结
在本案例中,具体完成内容有:
- 使用可视化加载和探索数据,以确定特征是否能将不同类别分开。
- 通过标准化数字特征并随机抽样到训练集和测试集来准备数据。
- 通过统计学,精确度度量进行构建和评估机器学习模型。
同学之间讨论刚才完成的机器学习代码,并且确保在自己的电脑运行成功
4 总结
-
KNeighborsClassifier的使用【知道】
-
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
- algorithm(auto,ball_tree, kd_tree, brute) – 选择什么样的算法进行计算
-
1.9 KNN算法总结
k近邻算法优缺点汇总
-
优点:
-
简单有效
-
重新训练的代价低
-
适合类域交叉样本
- KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
-
适合大样本自动分类
- 该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
-
-
缺点:
-
惰性学习
- KNN算法是懒散学习方法(lazy learning,基本上不学习),一些积极学习的算法要快很多
-
类别评分不是规格化
- 不像一些通过概率评分的分类
-
输出可解释性不强
- 例如决策树的输出可解释性就较强
-
对不均衡的样本不擅长
- 当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
-
计算量较大
- 目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。
-
1.10 交叉验证,网格搜索
学习目标
-
目标
- 知道交叉验证、网格搜索的概念
- 会使用交叉验证、网格搜索优化训练模型
1 什么是交叉验证(cross validation)
交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成4份,其中一份作为验证集。然后经过4次(组)的测试,每次都更换不同的验证集。即得到4组模型的结果,取平均值作为最终结果。又称4折交叉验证。
1.1 分析
我们之前知道数据分为训练集和测试集,但是**为了让从训练得到模型结果更加准确。**做以下处理
- 训练集:训练集+验证集
- 测试集:测试集
1.2 为什么需要交叉验证
交叉验证目的:为了让被评估的模型更加准确可信
问题:这个只是让被评估的模型更加准确可信,那么怎么选择或者调优参数呢?
2 什么是网格搜索(Grid Search)
通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。
3 交叉验证,网格搜索(模型选择与调优)API:
-
sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
-
对估计器的指定参数值进行详尽搜索
-
estimator:估计器对象
-
param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
-
cv:指定几折交叉验证
-
fit:输入训练数据
-
score:准确率
-
结果分析:
- bestscore__:在交叉验证中验证的最好结果
- bestestimator:最好的参数模型
- cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果
-
4 鸢尾花案例增加K值调优
- 使用GridSearchCV构建估计器
- 然后进行评估查看最终选择的结果和交叉验证的结果
- 最终结果
5 总结
-
交叉验证【知道】
-
定义:
- 将拿到的训练数据,分为训练和验证集
- *折交叉验证
-
分割方式:
- 训练集:训练集+验证集
- 测试集:测试集
-
为什么需要交叉验证
- 为了让被评估的模型更加准确可信
- 注意:交叉验证不能提高模型的准确率
-
-
网格搜索【知道】
-
超参数:
- sklearn中,需要手动指定的参数,叫做超参数
-
网格搜索就是把这些超参数的值,通过字典的形式传递进去,然后进行选择最优值
-
-
api【知道】
-
sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
- estimator – 选择了哪个训练模型
- param_grid – 需要传递的超参数
- cv – 几折交叉验证
-