算法流程:
1 设定模型y = θ0+θ1X θ的值是随机创建
2 计算代价costmes均方误差
cost = 1/(2m)∑(X(i)θ - y(i))
3 梯度下降
计算θ的导数△θ = 1/m*x.T
更新θ: θ:=θ - α△θ
初始化theta, 标准正态随机 random.randn 均值0 标准差1(迭代次数少)
循环
通过模型计算预测值
求代价函数 1/2m * ∑ (预测值-实际值)²
梯度下降 找代价最低点
求theta的偏导数
参数更新θ:=θ-αδθ
代价函数优势 均方误差
平方能让所有数据为正
平方能让函数为二次函数 最低点
误差小于1的平方数值更小,误差大于1的更大, 让模型线更贴近样本点 (用平方兼顾所有样本点到模型线距离最近)
凸函数
三个函数
损失函数
代价函数
目标函数
特征缩放
应用条件
特征是连续值
特征之间的差距比较大
效果
可以使各个特征之间的权重相对相同 权重代表特征的重要程度
可以使梯度下降效果加速
方式
归一化 将特征缩放到0-1之间 (x-min)/(max-min)
标准化 将特征转化为标准正态分布形式 (x-mu)/sigma
什么算法需要使用特征缩放
涉及距离和权重的算法
决策树不需要特征缩放
sklearn调用
sklearn.linear_model import LinearRegression 线性模型
fit(x, y) 模型训练 梯度下降过程
predict(x) 预测结果
model.coef_ 权重
model.intercept_ 截距
sklearn.datasets import load_boston 获取波士顿房价
data= load_boston() 获取数据
x = data.data 特征
y = data.target 标签
和线性回归之间的相同点
逻辑回归的边界线,线性回归的模型线
两者梯度推导的结果相同 1/m * x.T *(h-y)
模型运算过程几乎相同(逻辑回归)
初始化theta
z = x*theta
sigmoid h = 1/(1+e^-z)
代价函数 交叉熵
梯度下降
求导
参数更新
使用sigmoid函数的意义
h的结果是在0-1之间 转化为概率计算
结果值是正类别概率
接近0.5的导数值大,梯度下降速度快
代价函数 交叉熵函数 交叉熵=信息量的累计
costθ = -1/m∑[yln(h(xi))+(1-yi)ln(1-h(xi))]
信息量 = - log p
概率越大,信息量越小
他是二分类中最快的算法
阈值0.5阈值:
如果sigmoid函数值大于0.5(正类别概率0.5以上,负类别概率是0.5以下),预测结果就是正类别
如果sigmoid函数值小于0.5(正类别概率0.5以下,负类别概率是0.5以上),预测结果就是负类别
导数值范围
取值范围0<导数<=0.25
调用方式:
class sklearn.line_model.LogisticRegression(pennalty ='12',dual = False,tol = 0.0001,C = 1.0,fit_intercept = True,intercept_scaling=1,class_weight = None,random_state = None,...)
penalty:惩罚项可视为l1,l2;'netton-cg','sag','lafgs'只支持l2
dual:选择目标函数为原始形式还是对偶形式
tol:优化算法停止的条件.当迭代前后的函数差值小于等于tol时停止
C:正则化系数,越小正则化越强,,正则化系数的倒数
fit_intercept:选择逻辑回归模型中是否有常数项b
class_weight:用于标示分类模型中的权重
random_state:随机数种子
评估指标:
准确率(accuracy) = 预测对的/所有 = (TP+TN)/(TP+FN+FP+TN)
以下模型适用于二分类
精确率(precision)、查准类= TP/(TP+FP)
召回率(recall)、查全率 = TP/(TP+FN)
精确率和召回率不能一起使用
F1值就是精确率和召回率的调和均值1/F1 = 1/P+1/R
ROC全称是“受试者工作特征”(Receiver Operating Characteristic)。ROC曲线的面积就是AUC(Area Under the Curve)。AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)
取值越接近(0,1)点效果越好
ROC数据的一个量化处理(曲线与xy轴围成的面积),数值范围为0-1,数值越接近于1效果越好
数据差距大处理方法:
欠采样
去除一些反例(假设反例多),使得正、反例数目接近,然后再学习
优点:速度快 缺点:可能会丢失一些重要信息
过采样
增加一些正例,使得正、反例数目接近,然后再学习
优点:保持数据信息 缺点:可能会过拟合
代价敏感学习
给某类样本更高的权重,比如,正例是反例的一半,那么正例的权重就是反例的2倍,在sklearn中由class_weight指定
优点:速度快、降低过拟合风险 缺点:需要算法支持带权学习
混淆矩阵:
TP: 将正类预测为正类数
FN: 将正类预测为负类数
FP: 将负类预测为正类数
TN: 将负类预测为负类数
定义:
逻辑回归的叠加
使用上一层预测的结果,再进行计算预测
神经网络过程
正向传播
求预测结果
代价函数
交叉熵函数
最小二乘法 均方误差
反向传播
链式求导,找theta的导数
更新参数
代码
洗牌
打乱顺序,提高准确率
标签值类别扎堆 0000000 1111111
独热编码
标签化
通过几个特征预测是什么季节 y 春季 0 夏季 1 秋季 2 冬季3
春季和夏季的区别 1 春季和冬季差别3?
缺点
让标签之间产生差距,预测效果不好
独热编码
BGD: batch gradient descent 批量梯度下降 梯度一次用所有的样本,,计算精度高,计算量大
SGD: 随机梯度下降 随机选择一个样本计算损失函数,通过随时函数计算梯度,进行参数更新 受噪音影响,,但是速度快
mini-BGD: 小批量梯度下降 取值 (2~m-1)受噪音影响小,速度也比较快 一般用在深度学习
GBDT:
数据清洗
数据检视(三板斧)
head() 查看数据的格式,关系
info() 查看数据类型,是否有缺失值
describe() 标准差 大 可能出现噪音
好特征
取值不同时,会影响y的结果
噪音处理
在训练模型时,考虑没有噪音情况下的效果,所以要去除噪音
在实际情况下,噪音是不可避免的,所以测试集中要保留噪音数据
正则化应用 (匹配测试集中噪音)
字段分析
皮尔逊系数 分析相关性,相关性高的特征删除
特征和标签单独绘制 季节和用车辆 波动大,效果好
连续值和标签绘制图 小时和用车辆 需要将连续值进行分段处理,减少运行时间
多特征和标签处理 星期小时和用车辆 复合查询
特征工程: 特征选择,特征提取,特征缩放
数据预处理
缺失值为nan不能直接带入模型
缺失值处理方法:
删除缺失值 丢失数据资源
用中位数,均值。。。来替换 认为增加噪音
使用其他特征预测缺失值 预测特征需要一定相关性
映射到高维
二值化处理
连续特征
变为0,1
标签化处理Labelencode或pandas映射思想 (特征符合离散数据规律,单词表达形式)
独热编码:OneHotencode离散型特征 优势:将特征之间的差距变为统一的大小(方便权重计算)
特征缩放:标准特征缩放,归一特征缩放(一般用在连续型特征)
优势
如果x1取值大,x2取值小, 那么 x1的权重小,x2权重大, 会误导特征的重要程度(x对应的权重大,该特征重要)
提升模型精度,减少模型迭代次数
做正则化处理前,必须做特征缩放
过拟合,欠拟合
过拟合(高方差,低偏差)
模型在训练集的得分高,测试集中得分低
出现原因
特征过多 降维,特征筛选,正则化
连续型特征范围差 特征缩放
离散型标签化 独热编码
欠拟合(高偏差,低方差)
模型在训练集和测试集得分都低
出现原因
特征过少 升维
数据量少 增加数据
步骤1,数据预处理
缺失值为nan不能直接带入模型
缺失值处理方法:
删除缺失值 丢失数据资源
用中位数,均值。。。来替换 认为增加噪音
使用其他特征预测缺失值 预测特征需要一定相关性
映射到高维
二值化处理
连续特征
变为0,1
定义: 近邻算法,或者说K最近邻(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。
理解为物以类聚,人以群分
有监督算法
可以做分类也可以做回归
闵可夫斯基距离
1,曼哈顿距离
对应维度数值差绝对值的和
2.欧氏距离
对应维度数值差平方和开根号
3.切比雪夫距离
最大维度数值的绝对值
kNN算法执行流程
计算预测点和所有样本点的欧氏距离
将距离进行升序排列
取前k个样本点,获取样本的标签
通过标签,来决定预测值的类别
三大要素
度量距离
特征差异和,距离越小,两个样本之间差距越小
常用欧式距离,偶尔也用曼哈顿距离
k值选择(超参数)
相关度最高的样本
3-7常用范围
决策规则
分类:投票(少数服从多数)往往是多数表决,即由输入实例的k个邻近的训练实例中的多数类决定待测实例的类。或带权投票
回归:取平均值。或带权取平均值
训练KNN模型需要进行特征标准化吗?
需要,因为在距离度量的时候,如果不使用特征标准化,那么各样本点间的距离会相差较大,需要进行特征处理,让处理的临近点更贴切
只要依赖权重和距离度量的算法需要进行特征处理
蛮力法(brute-force)
k近邻法最简单的实现方式是线性扫描,需要计算待测实例与每个实例的距离,在大数据上不可行。
KD树(KDTree)
为了提高k近邻搜索效率,考虑使用特殊的结构存储训练数据,以减少计算距离的次数,可以使用kd树(kd tree)方法。kd树分为两个过程——构造kd树(使用特殊结构存储训练集)、搜索kd树(减少搜索计算量)
KD Tree是KNN算法中用于计算最近邻的快速、便捷构建方式。
搜索
找一个样本点设定为疑似最近点,将样本点到疑似最近半径设置一个超球体
通过这个方式,如果树中的节点和它相交,进行计算,不相交,返回上一级
原则
每次只找最近邻点(1个点)
找多个点,需要将之前的最近邻点排除以后,在进行运算
最近邻
在最近邻搜索(k=1)中,首先存储一个自认为是“当前最近点”的节点,然后在搜索过程中,找到更近的就替换掉。
K近邻
在KD树搜索最近邻的基础上,我们选择到了第一个最近邻样本,就把它置为已选。在第二轮中,我们忽略置为已选的样本,重新选择最近邻,这样跑k次,就得到了目标的K个最近邻,然后根据多数表决法,如果是KNN分类,预测为K个最近邻里面有最多类别数的类别。如果是KNN回归,用K个最近邻样本输出的平均值作为回归预测值
优点
思想简单,能做分类和回归
惰性学习,无需训练(蛮力法),KD树的话,则需要建树
对异常点不敏感
缺点
计算量大、速度慢
样本不平衡的时候,对稀有类别的预测准确率低
KD树,球树之类的模型建立需要大量的内存
相比决策树模型,KNN模型可解释性不强
球树(BallTree)
•贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。其中P(A|B)是在B发生的情况下A发生的可能性。
•朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。最为广泛的两种分类模型是决策树模型(DecisionTree Model)和朴素贝叶斯模型(NaiveBayesian Model,NBM)。低配贝叶斯
通常做的是:文本分类
成立条件:特征独立假设
P(Y|X) = P(Y)×P(X1|Y)×P(X2|Y)
朴素贝叶斯相比贝叶斯,运算量小,会损失概率精度
拉普拉斯平滑 : 防止概率值为0的处理方式
实现算法:
先计算标签概率,特征和标签之间的条件概率
有新数据后,调用之前算好的概率即可
词频统计
作用:通过词频,可以计算单词出现的频率(概率),可以使用朴素贝叶斯进行计算
TF:计算词频
TF-IDF:在多个样本中出现的词汇权重小,少量样本中出现的词频权重大(词频平衡)
贝叶斯家族
•高斯朴素贝叶斯•Gaussian Naive Bayes是指当特征属性为连续值时,而且分布服从高斯分布,那么在计算P(x|y)的时候可以直接使用高斯分布的概率公式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKrpstVn-1610092730677)(F:\桌面\张帅\图片1.png)]
特征是连续数据
•多项式朴素贝叶斯
特征是离散数据,常用在文本分类
•Multinomial Naive Bayes是指当特征属性服从多项分布,从而,对于每个类别y,参数为θy=(θy1,θy2,…,θyn),其中n为特征属性数目,那么P(xi|y)的概率为θyi。
伯努利朴素贝叶斯
•Bernoulli Naive Bayes是指当特征属性为连续值时,而且分布服从伯努利分布,那么在计算P(x|y)的时候可以直接使用伯努利分布的概率公式:
P(Xk|y) = P(1|y)Xk + (1-P(1|y))(1-Xk)
离散,二分类
•Python中分分词工具很多,包括盘古分词、Yaha分词、Jieba分词、清华THULAC等。它们的基本用法基本相同
停用词表 : •指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。
作用:•提升无用词,提升模型的计算精度
K均值 means平均
理解:物以类聚人以群分
基本思想:对于给定的类别数目k,首先给定初始划分,通过迭代改变样本和簇的隶属关系,的每次处理后得到的划分方式比上一次的好(总的数据集之间的距离和变小了)
介绍
K-Means(K均值)算法是无监督的聚类算法,算法简单,聚类效果好,即使是在巨大的数据集上也非常容易部署实施。正因为如此,它在很多领域都得到的成功的应用,如市场划分、机器视觉、 地质统计学、天文学和农业等。K-Means算法有大量的变体,包括初始化优化K-Means++以及大数据应用背景下的k-means||和Mini Batch K-Means
K-means算法,也称为K-平均或者K-均值,是一种使用广泛的最基础的聚类算法,一般作为掌握聚类算法的第一个算法
流程:
选择初始化的k个类别中心(质心)a1,a2,...ak; (初始化质心随机样本点作为质心)
对于每个样本Xi,将其标记位距离类别中心aj最近的类别j (计算所有样本点到质心的距离,距离哪个质心近,就归为哪一个簇)
更新每个类别的中心点aj为隶属该类别的所有样本的均值 (使用当前簇的样本,取均值,更新质心位置)
重复上面两步操作,直到达到某个中止条件
终止条件;
迭代次数、最小平方误差MSE、簇中心点变化率
(质心点位置不变/迭代达到次数)
K-means家族:衍生算法:
K-means缺点:
缺点一:聚类中心的个数K需要事先给定,但在实际中K值的选定是非常困难的,很多时候我们并不知道给定 的数据集应该聚成多少个类别才最合适....可以通过“肘方法”选择一个合适的k值
缺点二:k-means算法需要随机地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果,有 可能导致算法收敛很慢甚至出现聚类出错的情况.....可以通过k-means++算法来解决
K-means++:
从数据集中任选一个节点作为第一个聚类中心
对数据集中的每个点x,计算x到所有已有聚类中心点的距离和D(X),基于D(X)采用线性概率选择出下一个聚 类中心点(距离较远的一个点成为新增的一个聚类中心点)
重复步骤2直到找到k个聚类中心点
缺点:由于聚类中心点选择过程中的内在有序性,在扩展方面存在着性能方面的问题(第k个聚类中心点的选择依赖 前k-1个聚类中心点的值) k-means++ 最主要的缺点在于其内在的顺序执行特性,得到 k 个聚类中心必须 遍历数据集 k 次,并且当前聚类中心的计算依赖于前面得到的所有聚类中心,这使得算法无法并行扩展, 极大地限制了算法在大规模数据集上的应用。
获取质心存在顺序性,而且计算量大,在大数据中运行速度慢
k-mean||
原理:
先抽样,找出一个大概的质心点位置,再带入到大数据中进行质心位置调整
每次抽样K个点,执行log(样本数量)(5次)(抽样)
使用上一步样本点执行K-means操作,找出质心点(大概值)
使用上一步找出的质心点,带入到大数据集中,再执行K-means操作(微调)
k-means||是k-means++的变体,k-means||在初始化中心点时对kmeans++的缺点做了规避,主要体现在不 需要根据k的个数严格地寻找k个点,突破了算法在大规模数据集上的应用瓶颈,同时初始化的中心点更加健 壮
Mini-batch K-means
总结
优点
简单,易于解释,收敛速度快
缺点
需要事先确定K值
不能处理非凸集
对噪音敏感
聚类算法评估:
vmeasure(聚类有标签监督)
均一性
完整性
均一性和完整性的调和数值
均一性:一个簇中只包含一个类别的样本,则满足均一性;其实也可以认为就是正确率(每个聚簇中正确分类 的样本数占该聚簇总样本数的比例和)
p = 1/k ∑ N(Ci == Ki)/N(Ki)
完整性:同类别样本被归类到相同簇中,则满足完整性;每个聚簇中正确分类的样本数占该类型的总样本数比 例的和
r = 1/k ∑ N(Ci == Ki) / N(Ci)
V-measure:均一性和完整性的加权平均
Vβ = ((1+β²) × pr )/(β²*p + r)
手肘法:
手肘法的核心指标是SSE(sum of the squared errors,误差平方和),
手肘法的核心思想是:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差 平方和SSE自然会逐渐变小。并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程 度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小, 所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘 的形状,而这个肘部对应的k值就是数据的真实聚类数。当然,这也是该方法被称为手肘法的原因。
簇内不相似度:计算样本i到同簇其它样本的平均距离为ai,ai越小,表示样本i越应该被聚类到该簇,簇C中的所 有样本的ai的均值被称为簇C的凝聚度。
簇间不相似度:计算样本i到其它簇Cj的所有样本的平均距离bij,bi=min{bi1,bi2,...,bik};bi越大,表示样 本i越不属于其它簇。
轮廓系数:si值取值范围为[-1,1],越接近1表示样本i聚类越合理,越接近-1,表示样本i应该分类到另外的簇 中,近似为0,表示样本i应该在边界上;所有样本的si的均值被称为聚类结果的轮廓系数。
轮廓系数
取值范围 -1~1
越接近1效果越合理
可以确定最优K值
优点:
原理比较简单,实现也是很容易,收敛速度快
聚类效果较优
算法的可解释度比较强
主要需要调参的参数仅仅是簇数k
缺点:
不能处理如图情况
采用迭代方法,得到的结果只是局部最优。
对噪音和异常点比较的敏感。
密度聚类:
这类算法可以克服基于距离的算法只能发现凸聚类的缺点,可以发现任意形状的聚类,而且对噪声数据不敏感。
计算复杂度高,计算量大
常用算法:
DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
一个比较有代表性的基于密度的聚类算法,相比于基于划分的聚类方法和层次聚类方法,DBSCAN算法将簇定 义为密度相连的点的最大集合,能够将足够高密度的区域划分为簇,并且在具有噪声的空间数据商能够发现任 意形状的簇。
DBSCAN算法的核心思想是:用一个点的ε邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不 规则的cluster,而且聚类的时候事先不需要给定cluster的数量。
ε邻域(ε neighborhood,也称为Eps):给定对象在半径ε内的区域
N(x) = {y∈X:dist(x,y)<=ε}
密度(density):ε邻域中x的密度,是一个整数值,依赖于半径ε
P(x) = |N(x)|
MinPts定义核心点时的阈值,也简记为M
核心点(core point):如果p(x)>=M,那么称x为X的核心点;记由X中所有核心点构成的集合为Xc,并 记Xnc=X\Xc表示由X中所有非核心点构成的集合。直白来讲,核心点对应于稠密区域内部的点。
边界点(border point): 如果非核心点x的ε邻域中存在核心点,那么认为x为X的边界点。由X中所有的边界 点构成的集合为Xbd。直白来将,边界点对应稠密区域边缘的点。
噪音点(noise point):集合中除了边界点和核心点之外的点都是噪音点,所有噪音点组成的集合叫做 Xnoi;直白来讲,噪音点对应稀疏区域的点。
簇(cluster):一个基于密度的簇是最大的密度相连对象的集合C;满足以下两个条件:
Maximality:若x属于C,而且y是从x密度可达的,那么y也属于C
Connectivity:若x属于C,y也属于C,则x和y是密度相连的
算法流程:
如果一个点x的ε邻域包含多余m个对象,则创建一个x作为核心对象的新簇;
寻找并合并核心对象直接密度可达的对象;
没有新点可以更新簇的时候,算法结束。
算法特征描述:
每个簇至少包含一个核心对象
非核心对象可以是簇的一部分,构成簇的边缘
包含过少对象的簇被认为是噪声
算法原理
找一个样本点,在指定的半径范围内,如果样本点查过阈值,就生成簇
参数 半径 样本点阈值
优点:
不需要事先给定cluster的数目
可以发现任意形状的cluster
能够找出数据中的噪音,且对噪音不敏感
算法只需要两个输入参数
聚类结果几乎不依赖节点的遍历顺序
简单说为::::对噪音不敏感(查找噪音点) 不需要实现确定K值
缺点:
DBSCAN算法聚类效果依赖距离公式的选取,最常用的距离公式为欧几里得距离。但是对于高维数据,由于维 数太多,距离的度量已变得不是那么重要
DBSCAN算法不适合数据集中密度差异很小的情况
简单来说就是:参数调整难 计算量大
和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数k,当然它最大的优势是可以发现任意形状的聚类簇,而不是像K-Means,一般仅仅使用于凸的样本集聚类。同时它在聚类的同时还可以找出异常点。
密度最大值算法
层次聚类
凝聚
加入m个样本,初始状态聚类有m个簇,将所有簇中距离最近的两个簇进行合并,直到只剩下一个簇的时候
分裂
距离处理方式
single linkage
使用簇中最近的样本点计算距离
complete linkage
使用簇中最远的样本点计算距离
average linkage
使用簇中样本均值计算距离
层次聚类方法对给定的数据集进行层次的分解,直到满足某种条件为止,传统的层次聚类算法主要分为两大类算法:
凝聚的层次聚类:AGNES算法(AGglomerative NESting)==>采用自底向上的策略。最初将每个对象作为一个簇,然后 这些簇根据某些准则被一步一步合并,两个簇间的距离可以由这两个不同簇中距离最近的数据点的相似度来确 定;聚类的合并过程反复进行直到所有的对象满足簇数目。
分裂的层次聚类:DIANA算法(DIvisive ANALysis)==>采用自顶向下的策略。首先将所有对象置于一个簇中,然后按照 某种既定的规则逐渐细分为越来越小的簇(比如最大的欧式距离),直到达到某个终结条件(簇数目或者簇距离达 到阈值)。
层次聚类的合并算法
层次聚类的合并算法通过计算两类数据点间的相似性,对所有数据点中最为相似的两个数据点进行组合,并反复迭 代这一过程。简单的说层次聚类的合并算法是通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之 间的相似性,距离越小,相似度越高。并将距离最近的两个数据点或类别进行组合,生成聚类树。
欧几里德距离矩阵
层次聚类使用欧式距离来计算不同类别数据点间的距离(相似度)。我们在前面的几篇文章中都曾经介绍过欧氏距 离的计算方法,本篇文章将通过创建一个欧式距离矩阵来计算和对比不同类别数据点间的距离,并对距离值最小的 数据点进行组合。以下是欧式距离的计算公式。
通过欧氏距离计算下面A到G的欧式距离矩阵,并通过合并的方法将相似度最高的数据点进行组合,并创建聚类树。
距离计算方式
Single Linkage
Single Linkage的计算方法是将两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离。这种方法容易受到极端值的影响。两个很相似的组合数据点可能由于其中的某个极端的数据点距离较近而组合在一起。
Complete Linkage
Complete Linkage的计算方法与Single Linkage相反,将两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离。Complete Linkage的问题也与Single Linkage相反,两个不相似的组合数据点可能由于其中的极端值距离较远而无法组合在一起。
Average Linkage
Average Linkage的计算方法是计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离。这种方法计算量比较大,但结果比前两种方法更合理。
BIRCH算法(平衡迭代削减聚类法):聚类特征使用3元组进行一个簇的相关信息,通过构建满足分枝因子和簇直径限制的聚类特征树来求聚类,聚类特征树其实是一个具有两个参数分枝因子和类直径的高度平衡树;分枝因子规定了树的每个节点的子女的最多个数,而类直径体现了对这一类点的距离范围;非叶子节点为它子女的最大特征值;聚类特征树的构建可以是动态过程的,可以随时根据数据对模型进行更新操作。
优缺点
适合大规模数据集,线性效率;
只适合分布呈凸形或者球形的数据集、需要给定聚类个数和簇之间的相关参数;
CURE算法(使用代表点的聚类法):该算法先把每个数据点看成一类,然后合并距离最近的类直至类个数为所要求的个数为止。但是和AGNES算法的区别是:取消了使用所有点或用中心点+距离来表示一个类,而是从每个类中抽取固定数量、分布较好的点作为此类的代表点,并将这些代表点乘以一个适当的收缩因子,使它们更加靠近类中心点。代表点的收缩特性可以调整模型可以匹配那些非球形的场景,而且收缩因子的使用可以减少噪音对聚类的影响
优缺点:
能够处理非球形分布的应用场景
采用随机抽样和分区的方式可以提高算法的执行效率
指用户的消费能力
FRM
F 消费频率
R 最近一次消费
M 消费能力(花钱多少)
根据不同的客户使用不同的营销手段
特征缩放
需要距离、权重计算的算法
KNN,K-means,层次距离
线性回归,L1,L2,逻辑回归, SVM
半监督学习: 即训练集同时包含有标记样本数据和未标记样本数据。
实质是: make decisions问题,即自动进行决策,并且可以做连续决策。
主要包含四个元素: agent, 环境状态, 行动, 奖励;
强化学习的目标就是获得最多的累计奖励。
L1正则化: 也叫套索回归 Lasso回归 L1正则化表示各个参数绝对值之和。
(w) = 1/2N∑(w*x - y)**2+λR(w)
λ 0-1 λ正则化系数越大,正则化影响越深
R = |w1| + |w2|
生成稀疏权重矩阵,可以达到特征筛选的作用
sklearn.linearregression.Lasso
超参数:需要设定模型之前确定的参数 正则化系数 alpha
L2正则化: 岭回归 Ridge L2正则化标识各个参数的平方的和的开方值。
R = 1/2(w1 * 2 + w2 ^ 2)
减小权重大小,防止过拟合
sklearn.linearregression.Ridge
超参数:需要设定模型之前确定的参数 正则化系数 alpha
留出法
训练集测试集直接切分 洗牌,切片
为什么要洗牌?
数据打乱
交叉验证法(K折交叉验证 k3-7)
划分为k个互斥子集,用k-1作为训练集,剩下一个为测试集,最终每一个子集都会作为测试集,其余子集作为训练集,共进行k次建模,最终得到测试结果的均值。
优势
让每个样本都参与模型训练,同时避免过拟合
缺陷
增加数据运算量
留一法
交叉验证法的极端方式,有多少个样本,做多少折计算
精度最好,运行速度最慢
自助法
抽取比例0.368作为测试集
网格搜索交叉验证
找到最好的超参数
模型评估
均方误差
均绝对值误差
R方
取值范围0-1,越接近1,效果越好
0 证明模型效果极差
1证明模型效果好
R方 精度: 1-u/v, u=sum(h-y)**2, v=sum (y-y.mean)**2
TPR(预测为正的在正例中的比例) = TP/P = TP/(TP+FN)
FPR(预测为正的在正例中的比例) = FP/N = FP/(FP+TN)
我们只考虑判为正的情况时,分类器在正例和负例两个集合中分别预测,如果模型很好,在正例中预测,百分百为正例,而在负例中预测,百分0为正例,说明模型分类能力很强,因为对于不同的例子进行了区别对待,正确识别了
并且通过调整阈值,一定存在两个点:
1、全部样本都判正,则TPR=1, FPR=1
2、全部样本都判负,则TPR=0, FPR=0
以FPR为横坐标,TPR为纵坐标,那么ROC曲线就是改变各种阈值后得到的所有坐标点 (FPR,TPR) 的连线,画出来如下。红线是随机乱猜情况下的ROC,曲线越靠左上角,分类器越佳。
AUC就是ROC曲线下的面积
auc就是曲线下面积,这个数值越高,则分类器越优秀
集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器。弱分类器(weak
learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate
< 0.5)
集成算法的成功在于保证弱分类器的多样性(Diversity)。而且集成不稳定的算法也能够得到一个比较明显的性能提升
•并行地构造多个个体分类器,然后以一定的方式将它们组合成一个强学习器
串行地构造多个个体分类器,然后以一定的方式将他们组合成一个强学习器
•常见的集成学习思想有:
•Bagging方法又叫做自举汇聚法(BootstrapAggregating),思想是:在原始数据集上通过有放回的抽样的方式,重新选择出S个新数据集来分别训练S个分类器的集成技术。也就是说这些模型的训练数据中允许存在重复数据。
•Bagging方法训练出来的模型在预测新样本分类的时候,会使用多数投票或者求均值的方式来统计最终的分类结果。
•Bagging方法的弱学习器可以是基本的算法模型,eg:Linear、Ridge、Lasso、Logistic、Softmax、ID3、C4.5、CART、SVM、KNN等。
备注:Bagging方式是有放回的抽样,并且每个子集的样本数量必须和原始样本数量一致,但是子集中允许存在重复数据。
个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,然后使用组合策略,得到最终的集成模型,这就是Bagging的思想
•先构建:如何得到若干个个体学习器、弱学习器、基础学习器、基学习器
同质的 使用同一种类型弱学习器
异质的 使用不同种类的弱学习器
•后结合:如何选择一种结合策略,将这些个体学习器集合成一个强学习器
回归
Boosting:直接叠加、正则后叠加、学习法(Stacking)
Bagging:平均法、带权平均法、学习法
分类
Boosting:直接叠加、正则后叠加、学习法
Bagging:投票法、带权投票法、学习法
个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,然后使用组合策略,得到最终的集成模型,这就是boosting的思想
回归: Boosting:直接叠加、正则后叠加、学习法(Stacking)
分类:Boosting:直接叠加、正则后叠加、学习法
•介绍
•RF是基于决策树的集成模型,随机森林是机器学习中最成功的算法之一,他能做二分类、多分类和回归任务。随机森林里集成了很多棵决策树,目的是减小过拟合的风险(减小模型方差)。
•优点
•像决策树一样,RF可以处理类别特征与连续特征,能扩展到多类分类,不需要特征缩放,能捕获非线性关系 和特征间的影响
•算法可以并行
•森林
•树的集合
•注入随机性
•样本随机:训练每一个决策树使用的都是bootstrapping(拔靴法)产生的数据集
•特征随机:在每一个树结点上进行结点划分时,考虑特征子空间
•简单做法:从原始特征中随机不重复地抽取一些特征;
•延伸做法:从原始特征中随机不重复地抽取一些特征,然后将某些特征线性合并,产生一系列组合特征。
•分类: 投票,少数服从多数。每个树的预测结果就是给某个类别投一票,最终随机森林的输出值就是得票最多的类别
•回归: 平均法,每一个树都会输出一个实数,随机森林的输出值就是所有决策树输出值的均值
•优点
高效:更简单的分割平面、更短的训练预测时间
泛化能力增强:无用特征被移除
可解释性增强
•缺点
计算代价
如果没有选好 特征的话,会影响模型精度
•介绍
•置换检验是统计学中显著性检测的一种。
•思想
如果特征k是重要的,那么用随机的值将该特征破坏,重新训练和评估,计算模型泛化能力的退化程度,即,importance(k)= performance(G) - performance(G’) ,这个退化程度就可以度量特征k的重要性
采用什么样的随机数
均匀分布,高斯分布,…
置换
功能
二分类
多分类
回归
特点:样本分类结果没有概率
单体算法中,性能最好的算法 (分类边界两侧间隙越大,泛化能力好(鲁棒性高,很难出现过拟合问题))
确定边界
支持向量机
支持向量
机
支持向量机
from sklearn.datasets import *#加载数据集
from sklearn.linear_model import LogisticRegression,LinearRegression,Ridge,Lasso,ElasticNet#逻辑线性,岭回归,套索回归,l1l2结合
from sklearn.decomposition import PCA,TruncatedSVD#主成分分析,奇异值分解
from sklearn.preprocessing import StandardScaler,MinMaxScaler,PolynomialFeatures,Imputer,LabelEncoder,OneHotEncoder#标准缩放,归一缩放,多项式,缺失值填充,标签化,独热编码
from sklearn.svm import SVC,SVR#支持向量机分类和回归
from sklearn.model_selection import train_test_split,GridSearchCV#数据切分洗牌,网格搜索交叉验证
from sklearn.metrics import accuracy_score,precision_score,f1_score,r2_score,roc_auc_score,recall_score,roc_curve,classification_report,confusion_matrix,mean_squared_error,mean_absolute_error,auc#精确率,准确率,f1分值,r2分值,auc得分,召回率,roc得分,分类报告,混淆矩阵,均方误差,均绝对值误差,auc
from sklearn.tree import DecisionTreeRegressor,DecisionTreeClassifier#决策树回归,分类
from sklearn.ensemble import RandomForestRegressor,RandomForestClassifier#随机森林回归,分类
from sklearn.pipeline import Pipeline#管道
from sklearn.
from sklearn.neural_network import MLPClassifier,MLPRegressor#神经网络分类,回归
from sklearn.cluster import KMeans#k-means聚类
from sklearn.model_selection import learning_curve#学习率曲线
'''
数据清洗
特征工程
模型处理
'''
#### 数据清洗 缺失值处理(删除,填充,预测) 噪音处理(箱线图,x-mean>3std)
#### 特征筛选(查看数值是否唯一 频数统计排序 两个特征之间查看皮尔逊系数,画热图)
#### 特征工程
from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder, OneHotEncoder, PolynomialFeatures
#### 模型选择
from sklearn.model_selection import train_test_split, GridSearchCV, learning_curve
#### 回归
from sklearn.linear_model import LinearRegression, Lasso, Ridge
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.neural_network import MLPRegressor
#### 分类
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.neural_network import MLPClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
#### 评估指标
#### 回归 R方 均方误差 均绝对值误差
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
####分类
# 多分类 分类报告 混淆矩阵 准确率
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
# 二分类 精确率 召回率 调和均值 roc曲线 auc面积
from sklearn.metrics import precision_score, recall_score, f1_score, roc_curve, roc_auc_score
'''
调用波士顿数据集,将数据集使用pca降维,保留下5个特征
使用网格搜索交叉验证,分别处理knn算法、决策树算法,l2正则,分别找出最优参数和最优得分
使用最优得分的模型匹配最优参数训练并预测测试集得分
'''