Sklearn 学习笔记
人工智能->机器学习->深度学习 所属分支
学习资源来自网站https://www.bilibili.com/video/av39137333
数据分析框架
如何多维度对手头的数据进行描述
数据分析汇总用到的统计学基础知识
机器学习知识域思维导图
图片.png
图片.png
图片.png
机器学习简要介绍
图片.png
图片.png
特征工程为将预处理过的数据转化为可以被算法所用的数据 date string 类型转为可处理的数据类型
数据集&sklearn基本介绍
图片.png
图片.png
sklearn 数据集导入
*用导入数据集名称代替
图片.png
图片.png
数据集返回值是继承自py的字典可以用dataset.key得到value
图片.png
数据集的划分 训练集和测试集
图片.png
随机数种子 和testsize根据需求可不填 随机数种子决定盲抽哪些数据当做测试
而在当比较不同算法性能时 需要控制随机数种子变量一致!!这时候需要自行设定
返回值顺序要格外注意!取名见下
图片.png
特征工程介绍
精度差距:算法(基本都用现成,差别不大)+特征值提取
图片.png
图片.png
pandas处理缺失值 某些错误值 拿到干净的数据用于学习
何为特征提取?
文本,图像分类时 将字符串等无法处理的数据转换为可以用数学公式计算的数值 如onehot编码(对每一种类别都平等看待,让编码方式不表示各类的大小关系如001 010 011就隐含了大小比较)
图片.png
sparse=True(默认)表明返回的是稀疏矩阵表示形式(数据结构中讲过 只表示非0项及其在矩阵中所在位置) 见下方
transform dictionary(字典数组) to vector/matrix(数值)
将数据集中每一个样本都转化为一个同维度向量 one hot编码,多个向量构成一个矩阵 下面的应用将类别转为one hot编码牺牲了存储空间但保证了各类别的平等
图片.png
为了解决使用onehot编码导致矩阵稀疏的缺陷,fit transform使用稀疏矩阵的表示方式来压缩空间 左下图
图片.png
下图为上述三个函数的使用方法
图片.png
应用场景:用于像 泰坦尼克数据集中有 pclass sex等多个特征的情况 而这些特征的取值范围一般都固定且比较少 此时可以将这些特征统统使用字典特征抽取 得到稀疏矩阵
图片.png
文本特征提取:
图片.png
stop_words参数指定不考虑哪些无实际意义的词 可以上网查询常见停用词表
transfer.fit_transform(data)默认返回稀疏矩阵格式 可以用toarray函数转化为正常矩阵
图片.png
对于中文句子需要采用分词预处理 同时会省略其中的单字词
图片.png
用jieba库进行分词处理
图片.png
(‘ ’.join用于将jieba库把一句话分割成的各段分词用‘ ’重新拼接成一个完整的字符串)
中文文本特征提取完整流程
图片.png
文本特征抽取之tfidfvectorize (tf表示词频term frequency idf 逆向文件词频为inverse document frequency)
在进行文本分类时,我们是通过出现次数较多的词来进行类别判断的,但是一些常用的虚词关联词可能会由此产生干扰,故我们要从中找出关键词
图片.png
用tfidvectorize便可找出关键词
图片.png
一个tf和idf的计算案例 idf和tf越高越有可能成为关键词 返回的结果矩阵也是衡量重要性的数值(日后机器学习中便是用此数据) 16:06
图片.png
特征预处理(归一化 标准化)
图片.png
采取特征预处理的原因:避免计算欧几里得距离时 各类数据之间的尺度不同对整体距离计算的影响(下图里程数和时间比明显不是一个量级,机器学习时只能学到里程数的特征,但实际上三者同等重要)
图片.png
需要对上数据作无量纲化/归一化/标准化处理,将不同规格数据转化为同一规格:
1.归一化
图片.png
计算例子:
图片.png
对应api
图片.png
图片.png
2.数据标准化
归一化存在缺陷:一旦最大值和最小值是异常点 将会严重影响归一结果 归一化仅适用于小数据场景
(所以一般特征处理都用标准化处理):
图片.png
异常点对均值影响不大
API:
图片.png
图片.png
降维
ndarry中维数即数组嵌套的层数 0维标量 1维向量 2维矩阵
此处降维指的是对上述二维数组dataframe(样本,特征)降低列/特征个数,实质上是除去存在一定相关程度特征(如降雨量和湿度)的冗余信息,最终筛选出各不相关的特征。
方法一:filter过滤
1.方差选择法 去除方差较小的特征(因为可能样本之间该特征值都高度一致 对模型学习无太大帮助)
图片.png
-
相关系数法 衡量各特征之间相关程度以排除相关特征
相关系数有多种计算方法,此处采用皮尔森系数图片.png
使用实例 返回一个二元素的数组,首元素即为相关系数
图片.png
当发现两个特征之间相关性极其高时可以采用
1.选择其一
2.两者加权求和形成一个新特征并舍弃二者3.主成分分析 pca
图片.png
案例:对水壶拍照 从三维到二维 不同角度拍摄可能会影响最终对水壶识别
故pca要保证减少损失信息可以还原原貌
又比如对平面五个点降维(投影)使结果仍为五个点
图片.png
可见pca涉及矩阵运算实现降维
api:
图片.png
使用例子:
(保留两个特征)
图片.png
降维案例之instcart菜篮子分析
探究各用户对商场不同类别物品偏好,由此制定不同营销策略 代码部分飘过
sklearn 转换器预估器
用于分类算法
转换器(特征工程的父类):昨天用于特诊工程的fit_transform
可以分割成fit(进行一些必要数据的计算如均值) 和transform两个api一起用 那为什么还要单独剥离出fit呢因为在标准化api中fit用于对数据进行求平均值 标准差的操作而transform则用来进行(x-mean)/std的最终操作,fit_transform整合二者 将fit算出的数值保存在转换器中 并用在后续的transform操作中
注意:后续鸢尾花案例中为了使训练集和测试集用相同的均值和标准差进行标准化,用到了这一原理
图片.png
估计器(分类 回归 无监督算法的父类):
图片.png
既然是父类 则代表子类机器学习算法中有公共流程 即
(x_train是训练集的特征值 y_train是训练集的目标值即标签 )
图片.png
图片.png
KNN算法
k个nearest neighbor k取值任意
核心思想 根据你的k个最近邻居类别来推断你的类别(k个邻居在场桥则我也在场桥)物以类聚 人以群分
那么如何确定邻居是谁?通过欧氏距离 曼哈顿距离(各特征差绝对值累加)明可夫斯基距离等计算
注意k值过小会受到异常值的影响,和异常点离得最近则受牵连
而k值过大容易导致结果判断错误,极易受样本数目小且不均衡的影响
可以用交叉验证获取最优k
同样进行knn分类器训练之前需要对数据作标准化处理
KNN 算法api
图片.png
应用案例之鸢尾花分类
KNN算法性能分析
懒惰算法:需要计算各点之间的距离并比较
模型选择和调优(k值的自动选择)
图片.png
交叉验证 n折交叉验证
作用在于判断当前取的k=1,3,5..值得到的最终识别性能如何,数据量大时可以取较小的n否则耗时过多
图片.png
图片.png
目的:让根据某一k值训练出的模型的评估结果更加准确可信
网格搜索(grid search)
自动完成对k取值范围内所有k的模型训练并进行比较,由此选出最优k值
图片.png
上述二者合为一个api
图片.png
facebook位置预测 4(该案例的特征和目标之间的关系尚未明确)
图片.png
图片.png
problem :由于数据量过大(千万级别的记录)可以先筛选其中一小部分用来分析,同时对于time时间戳特征 需要将其转化为更有意义的特征如年月日时分秒,最后由于签到地点place_id如果是仅出现一两次则对于广告投放意义不大,可以过滤之
流程分析如下
图片.png
代码实现 用到的pd数据预处理api to_datetime和datatimeindex可以之后看视频
经过这次事件可以发现耗费精力最多的部分在数据处理上,其余基本可照搬套路
朴素贝叶斯算法(概括就是朴素加贝叶斯)
图片.png
朴素的含义:假设特征之间是相互独立的 故p(a,b)=p(a)p(b) p(a,b|c)=p(a|c)p(b|c)
作用:如此一来就能算出原样本中不存在的特殊样本的概率 用于后续贝叶斯计算
图片.png
图片.png
贝叶斯:贝叶斯公式
应用场景:文本分类 单词作为特征
当样本数目太少时 还是不可避免会出现某一条件下概率为0的情况,
图片.png
此时可以使用拉普拉斯平滑系数
图片.png
特征值个数m此处为单词的种数 即6
m为所有不重复的单词个数(看到19)
使用api建立贝叶斯分类模型,之后用fit函数从训练集中寻找规律:
图片.png
朴素贝叶斯总结:
图片.png
贝叶斯用于文本分类
图片.png
图片.png
图片.png
只要比较 pc 和 p非c的概率值 就可已确定到底是不是c这一类别了 而要求概率也只要求分子 根据独立原理 分子又可以变成
图片.png
决策树(分类器同样要经过数据集训练后得到)
构建树的准则:高效进行决策 即越重要(区分度越高如在借贷中最看重工作有无 无工作一定不会批准贷款)的特征距离根节点越接近 判断顺序越靠前
特征重要程度判断依据:信息增益
图片.png
当知道某一特征后消除的不确定性(信息熵)最多,那么它就是最重要的特征,信息增益最高
考虑年龄这一特征的信息熵H(),增益g()
图片.png
对每一个特征都经过上述计算得出信息增益后可以构建决策树(有房子一定会给你贷款,没有再看其他 )
模型建立api
代码示例(决策树无需进行标准化操作哦)
通过上述实验可见决策树的预测准确度反而不如knn,故可知不同算法有其特定使用场景,机器学习科学家需要做的工作就是让模型扬长避短,知人善任
决策树可视化
图片.png
http://www.webgraphviz.com/ (需要再谷歌浏览器使用
优缺点
决策树——大数据实践课程学习
(原来决策树还是贪心算法的应用哦) 每次选择信息增益最高的属性作为下一个分支节点 终止条件见下
第二个条件的意思是分到一定程度后如发现年龄 》35的都会买保险 那么就不需要再往下分了
构建完树之后可能还需要剪枝
在c4.5中可以采用的终止条件
老师安利的 专为小白打造的数据分析、挖掘、可视化软件weka (可以用于论文展示结果数据) 但功能比较简单
泰坦尼克号预测
图片.png
11:55
线性回归
图片.png
回归问题:目标值为连续的
应用场景:
图片.png
定义: 假定存在一个从特征值到目标值的对应函数并求出它,如从平时期末成绩得到总评成绩 一般可以y用一个矩阵来表示该函数
图片.png
图片.png
非线性关系的函数也可以叫做线性模型 如
图片.png
如何找到合适的线性模型即确定权重和偏置(模型参数) 用于训练呢
损失函数
图片.png
图片.png
机器学习模型会利用该函数自动通过一些求导调参方法来降低损失值
优化方法 :梯度下降 勤奋努力的平凡人
(通用性极强)利用迭代根据导数不断调整参数权重w1和偏置w0,这就是机器学习的“学习”过程
图片.png
(α为步长/学习率,偏导数为梯度)
梯度下降api
图片.png
回归系数即权重,数据集中特征的个数和权重个数是相同的 学习率/步长的确定为动态调整,初始时步长较长提高效率,后逐步变短提高准确度 使用invscaling方法
波士顿房价预测(梯度下降篇)
图片.png
跳到逻辑回归
图片.png
常见应用场景
图片.png
预测广告点击率实际就是广告是否被点击(两种情况)
“回归”命名由来
图片.png
将上述的结果带入下面的x中,得到一个结果(0到1之间) 结果映射关系图见下
图片.png
图片.png
结果大于(阈值,自定义)0.5 小于0.5对应两个类别
关键问题仍然在于如何确定权重和偏置使得预测效果最佳
即构建损失函数
使用对数似然损失来表示损失大小
图片.png
y=1表示真实值属于该类别 y=0表示不属于该类别
图片.png
图像横坐标表示sigmoid函数得到的0~1范围内的结果 纵坐标表示对应loss的大小 即预测结果sigmoid输出值和正确结果0/1偏差越大 loss数值越大
上述分段函数整合成一个公式即为
图片.png
实例计算损失函数
图片.png
逻辑回归api
图片.png
跳到roc曲线和auc指标
图片.png
auc的值为红色虚线和坐标轴围成的三角形面积
评价模型最终看auc
图片.png
roc曲线绘制依赖于下两个指标
图片.png
对应的api
图片.png
kmeans
该算法属于无监督学习:无目标值
kmeans原理、步骤
k值可以根据需求自定义 或用于调优找达到最优聚类效果的k
图片.png
原中心点指的是上一次计算出的新中心点
图片.png
kmeans 对应的api
图片.png
n——cluster为k的值
labels不是函数的参数 而是该预估模型的一个可以查看的参数,用于显示结果
聚类流程
图片.png
聚类评估(轮廓系数 追求 高内聚低耦合)
图片.png
图片.png
聚类效果最好情况:bi>>ai ,sci->1
最差情况为趋近-1 所以轮廓系数在-1和1之间 越趋近1效果越好 趋近-1效果越差
图片.png
轮廓系数对应api(所有评估器都在metrics中)
图片.png
kmeans 总结
图片.png
应用场景:在分类的标签定义出来之前先用聚类进行过渡