机器学习开发的流程(sk-learn)
加载数据集
数据预处理
选择模型(算法)
训练模型
评估模型
如果模型达到要求,进入实战
如果模型达不到要求,可以优化(调参数).扩展数据集,增加泛化能力,可以换模型
——————————————————————
·监督学习算法
——————K-近邻算法(KNN)
样本集包含每条数据与分类的对应关系
输入新数据,将新数据的每个特征与样本集中数据对应特征比较
计算新数据与样本集每条数据的距离,然后排序
取前k个样本对应分类标签,出现次数最多的分类标签作为新数据的分类
例子:
爱情片和动作片,接吻和打斗镜头,样本集有若干爱情片和打斗片
来了一个有若干镜头的片,计算它与其他电影的距离,当然,如果他是爱情片那他与其他爱情片距离近,取前几个样本的分类当然就是爱情片
流程:
加载数据,构建特征矩阵 归一化
计算样本距离,预测样本分类(求k个距离最近点的class,最后得到预测class)
用测试集测试,求模型预测正确率
KNN优点:精度高,对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
适用数值型和标称型数据
(需要先训练样本数据,无法给出基本构成信息,无法平均具体特征,而决策树将使用概率测量方法处理分类问题)
——————logistic回归算法
套一层sigmoid函数变成二分分类方法,y非0即1(概率问题),forwardprop和backprop梯度下降求最优
容易出现问题:梯度消失和爆炸、过拟合和欠拟合
优点:计算代价不高,容易理解和实现
缺点:容易欠拟合,分类精度不高,需要各种调优(归一、正则、优化算法等)
适用数值型和标称型数据
——————朴素贝叶斯算法NBM
给出待分类项,求解此项各个类别的概率,哪个最大就预测是哪个
贝叶斯P(A|B)=P(B|A)P(A)/P(B)
朴素:AB事件相互独立
应用:比如用他来解决垃圾邮件过滤
流程:
分析数据集取出3000个常用词
训练集样本数m,构建m*3000矩阵X,计算每个邮件中词频
构建目标向量Y(标注好的为垃圾邮件的)
使用X,Y训练模型,测试集评估score,或使用预测predict
优点:数据少时也有效,可缺失数据
缺点:数据必须来自同一分布
——————决策树算法 Decision Tree
决策树:通过计算信息增益,找到是信息增益最大的一组最优解特征,然后根据最优解特征构建一棵树来做分类,这棵树就叫决策树
信息熵:系统或体系的混乱程度
y=-∑pi*log(pi) 累加m类别数量,p分别为分配到对应类别的概率
决策树分为分类树和回归树两种
分类树对离散变量做决策树,回归树对连续变量做决策树
优点:复杂度低,数据可丢失,一般处理不相关特征数据
缺点:过度匹配
——————SVM支持向量机
工作原理:寻找最大分类间距,通过拉格朗日函数求优化的问题
流程:收集、准备、分析数据 训练算法 测试算法
使用算法(SVM是一个二类分类器,对多类问题应用需要做一些修改)
线性可分时,直接SVM一下
非线性情况,需要用到核函数kernel,将数据映射到高维空间,达到线性可分
SVM的优点:泛化能力强、一般性
缺点:参数条件和核函数选择敏感,不加修改的SVM仅适用于处理二分类问题(多分类问题可以执行多次二分类)
——————随机森林算法
使用多个决策树当作一个分类器,投票表决
它可以平衡误差,泛化能力强,训练速度快,容易做成并行化方法
它的缺点就是容易过拟合
——————AdaBoost算法 属于boosting算法
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)
使用多个分类器训练,将训练错误标注加权,迭代训练,以达到整体分类最佳
优点:泛化,错误率低,无参数调节,自行训练错误加权
缺点:对错误异常敏感
————————推荐算法
学术研究少,应用非常多 各种用户推荐、广告推荐
精准定位,减少成本,提高准确率
物以类聚,人以群分,你朋友喜欢的,你也可能喜欢
协同过滤算法(可以通过使用SVD奇异值分解近似矩阵X被配制)
给用户找朋友(协同)
将朋友消费过的所有商品做一个评分估计
过滤掉该用户消费过的商品(过滤)
将未消费过的商品排序,把评分高的返回
做推荐
实现流程:加载数据 计算推荐目标用户与其他用户的距离,找到相似用户
将相似用户(朋友)消费过的商品进行评分估计
过滤掉该用户已经消费的商品 排序,将评分高的商品返回
计算距离方式
欧式距离 两个点的绝对距离 对数值敏感,适用推测距离
余弦距离 两个向量的夹角余弦
关注向量之间角度,不关系长度,不关系具体数值,适用推测是否同样的三观,只是程度不同
杰卡德距离 交集和并集的比值 度量相似程度,适用推测相似度
·非监督学习算法
——————K-Means算法
k聚类数 means平均值 质点:样本点 簇:数据集合
工作原理:随机选k个质点
分别计算各样本到质点的距离,把样本点划给每个质点
计算每个簇.样本集的平均值,更新为新的质点
重复划分样本点和更新质点位置,直到质点的变化量足够小
每个簇的质点class就是当前簇所有样本点的class
能局部的看问题,数据集大时收敛比较慢,效率不高
但他不会处理异常点,对数据敏感易出错,这时就用基于密度的聚类DBSCAN
——————DBSCAN聚类算法
核心点:他的eps邻域至少包含minpts的对象点 边界点、噪音点
边界点是某个核心点邻域内的,是直接密度可达的
流程:加载数据集 设置eps和minpts
从数据集随机拿一个点
如果它是核心点就找它所有的密度可达点,形成一个簇,如果不是核心点就换个点重找
重复找点形簇,直到所有点都被分类
最终返回所有的簇
优点是比kmeans好用,是挺常用的聚类
它的缺点就是对数据敏感,如果数据集密度不均匀的话就搞不成,需要好好设设参数,它的正确率无法确定,看数据集吧,一般性较差
——————PCA主成分分析算法
从大数据集中,找到主要的特征提取出来做后续操作,降维.提升效率.专注
一个数m和一个向量x,使Ax=mx,则称m是矩阵A的特征值,x是A的特征向量
协方差:两组数据的偏离程度,结果为正=正相关
Var(X)=i=∑(Xi?X平均)(Yi-Y平均)/n-1
对协方差矩阵求特征值和特征向量 用矩阵多项式求 然后排序
选择占比大的那些特征向量构建新的特征矩阵,做后续操作
流程:加载数据-计算协方差.构建矩阵-找到占比大的特征向量.主成分.构建新样本集-后续操作
优点:提升效率.简化数据,降低数据的复杂性.识别最重要的特征,如决策树般简单.像SVM一样的分类效果
缺点:可能损失一些必要的特征,只能适用于数值型数据集
——————SVD奇异值分解算法
矩阵分解为多个独立部分,mn=mkkkkn
奇异值:特征值的开方
根据奇异值矩阵中奇异值,如果某写奇异值的总和超过90%,认为其他奇异值都为0,其他特征都是噪声或者冗余特征
奇异值矩阵的特点:
是一个对角方阵,只有对角线有元素,其余元素为0,元素由小到大顺序排列
数据挖掘关联性分析算法:
——————Apriori算法
寻找物品间的关系 频繁项集:经常出现的一组数据
支持度:数据集中包含一个项集所占总体的比例
可信度:用支持度做计算,Ka_b=Zab/Za
Apriori原理:一个项集是频繁的,它的子集也是频繁的,反之亦然
流程:加载数据集,指定最小支持度
生成单项集列表 扫描列表,去除不满足最小支持度的项集(剪枝)
对剩下的项集进行排列组合 重复迭代,最后把满足条件的项集列表输出
缺点:对大数据处理慢
——————FP-growth算法
是基于Apriori算法构建一个FP树 效率提升
流程和Apriori差不多,在最后构建一棵树