应用场景:
个性化推荐:个性化指的是根据各种因素来改变用户体验和呈现给用户内容,这些因素可能包含用户的行为数据和外部因素;推荐常指系统向用户呈现-一个用户可能感兴趣的物品列表。
精准营销:从用户群众中找出特定的要求的营销对象。
客户细分:试图将用户群体分为不同的组,根据给定的用户特征进行客户分组。
预测建模及分析:根据已有的数据进行建模,并使用得到的模型预测未来。
如:朴素贝叶斯处理垃圾短信,K-means处理商店选址
机器学习开发流程:
数据收集(成本最高)→数据清洗(包括数据分析和挖掘的过程,在后半段)→特征工程(独热编码、特征化····)→数据建模→模型反馈数据
模型训练的过程需要不断修改模型,往后的数据带入也要进行修改,实际投入使用也是在这个环节不断进行维护,让模型越来越优
数据太少容易欠拟合,模型成型效果差
数据重复值过多容易过拟合
实际处理过程耗时需要半年起步
数据收集:
数据来源:
用户访问行为数据
业务数据
外部第三方数据
数据存储:
需要存储的数据:原始数据、预处理后数据、模型结果
存储设施: mysql、HDFS、 HBase、 Solr、 Elasticsearch(搜索平台)、 Kafka(大数据的消息队列)、 Redis等
数据收集方式:
Flume & Kafka
数据预处理:
实际生产环境中机器学习比较耗时的一部分
大部分的机器学习模型所处理的都是特征,特征通常是输入变量所对应的可用于模型的数值表示
大部分情况下,收集得到的数据需要经过预处理后才能够为算法所使用,预处理的操作主要包括以下几个部分:
数据过滤
处理数据缺失
处理可能的异常、错误或者异常值
合并多个数据源数据(无法单独表示的一些数据需要进行合并)
数据汇总
1、特征缩放:
直接求解缺点:
x (1)特征对应权重会比x (2) 对应的权重小很多,降低模型可解释性(未进行该处理的会出现多次不必要的迭代)
梯度下降时,最终解被某个特征所主导,会影响模型精度与收敛速度
正则化时会不平等看待特征的重要程度(尚未标准化就进行L1/L2正则化是错误的)
特征缩放:
规范化(归一化)(把特征数据用0到1之间的值来表示)或标准化(用标准正态分布的方式)
标准化使用较多,因为归一化会出现0,影响最后的计算结果
注意:
1.当对新数据进行特征缩放时,应使用训练集的缩放规则(不能随意更改缩放规则)
2.特征缩放只对带有权重和距离计算的算法有作用(KNN需要,但决策树不需要,决策树用if-else的逻辑判断来处理就可以,决策树也不用进行独热编码和特征拓展)(集成学习、随机森林都是不用进行特征缩放的,运算就会节省很多时间)
2、缺失值处理:
方法一:
直接删除有缺失的样本(缺失值只占万分之一的时候才好用)
优点:简单
缺点:浪费资源,无法处理有大量缺失值的任务
方法二:
用平均值、中值、分位数、众数、随机值等替代(缺失值只占少量的时候可以用)
优点:简单
缺点:人为增加了噪声
方法三:
用其他变量做预测模型来算出缺失变量。(通过其他数据推测出缺失值)
看似更符合实际,但是如果其他变量和缺失变量无关,则预测的结果无意义
方法四:
最精确的做法,把变量映射到高维空间。(升维)
比如性别,有男、女、缺失三种情况,则映射成3个变量:是否男、是否女、是否缺失。
3、类别不平衡处理:
(1)欠采样
去除- -些反例(假设反例多),使得正、反例数目接近,然后再学习
优点:速度快
缺点:可能会丢失一-些重要信息
(2)过采样
增加一些正例,使得正、反例数目接近,然后再学习
优点:保持数据信息
缺点:可能会过拟合(在这是重复度太高导致)
(3)代价敏感学习(平衡权重才是一种好的处理方式)
给某类样本更高的权重,比如,正例是反例的一半,那么正例的权重就是反例的2倍,在sklearn中由class_ weight(类别权重)指定
优点:速度快、降低过拟合风险
缺点:需要算法支持带权学习(不支持这种带权学习的是用不了的)
4、TF-IDF:
在一一个大的文本语料库中,-些单词将非常存在(例如英语中的"the"、 “a” 、"is”),因此对文档的实际内容几乎没有任何有意义的信息。如果我们把直接计数数据直接输入分类器,那么这些非常频繁的术语将掩盖更罕见但更有趣的术语的频率。
为了将计数特性重新加权为适合分类器使用的浮点值,通常使用tf- idf转换。
tf是指术语频率, tf-idf是指术语频率乘以反向文档频率:
tf-idf(t,d) = tf(t,d) x idf(t)
nd表示有多少个样本,df(d,t)中t表示某字,d代表样本,df(d,t)就是出现t这个字的样本有多少个
某个词在样本中出现的越少,idf(t)的权重就越大
nd代表样本的数量,df在计算出文档A中的各个单词在出现在样本中的频数df
模型测试评估:
模型选择:对特定任务最优建模方法的选择或者对特定模型最佳参数的选择。
回归(线性回归,多项式回归,决策树,随机森林(最常用),AdaBoost(最常用), GBDT(最常用), SVM, KNN)
分类(逻辑回归,决策树,随机森林(最常用),AdaBoost(最常用), GBDT(最常用), SVM,朴素贝叶斯(最常用),KNN)
聚类(K-means(最常用), GMM,DBSCAN)
在训练数据集_上运行模型(算法)并在测试数据集中测试效果,迭代进行数据模型的修改,这种方式被称为交叉验证(将数据分为训练集和测试集,使用训练集构建模型,并使用测试集评估模型提供修改建议)
留出法(hold-out) :一部分为训练集,一部分为测试集。
应尽量保证数据分布的一致性。
划分比例: 7:3左右
交叉验证法(k-fold cross validation) (其中的网格搜索交叉验证法使用最多):划分为k个互斥子集,用k- 1作为训练集,剩下一个为测试集,最终每一个子集都会作为测试集, 其余子集作为训练集,共进行k次建模,最终得到测试结果的均值。
K取值一-般为10
随机取k个互斥子集,进行p次,最后对p个k-fold cv进行取平均,叫作p次k折交叉验证
模型的选择会尽可能多的选择算法进行执行,并比较执行结果
模型的测试一般以下几个方面来进行比较,不同算法使用不同的评估方式
回归(mse, rmse, mae, R2)
分类(accuracy, precision, recall, roc, auc):比如混淆矩阵
聚类(sse(手肘法的核心指标,分得越细,误差平方和就越小,下降的时候从急促到平缓的阶段出最佳值),轮廓系数等):单靠手肘法判断出来不明确,这时就可以再用轮廓系数(s(i)为1是最好的)
数据挖掘或分析中,二分类的模型比多分类的模型要多得多
模型布置整合:
当模型构建好后,将训练好的模型存储到数据库中,方便其它使用模型的应用加载(构建好的模型一般为一个矩阵)
模型构建:耗时半年或更长
模型需要周期性
布署时间:一个月、一周
由于项目上线后会根据不同情况有所调整,需要进行对模型进行迭代更新,根据实际情况进行调整
常用机器学习算法:
回归(首选集成学习):
线性回归
最基础的算法,可以配合正则化,多项式进行处理
决策树(Decision Tree)
使用最大方差方式进行回归预测,操作不当可能出现过拟合或者欠拟合
KNN (K近邻)
采用距离方式预测回归数值,在大数据中不好计算,不好确定K值选择
SVM (支持向量机)(在传统的模式识别使用最多,如人脸识别)
可以用作回归,是单一学习器中效果最好的一-种
集成学习(随机森林, GBDT, AdaBoost)(最优最强大的亮点是底层都是使用决策树的,可以避免使用独热处理、特征缩放、特征拓展等等,节省大量时间)
采用多个弱学习器进行计算操作效果,相比于单一学习器能够达到更高精度,但是会牺牲计算时间
分类(在机器学习和深度学习中很多问题都是分类的问题,线性问题较少):
逻辑回归(LR)(因速度最快所以应用最多,推荐算法首先要进行的就是逻辑回归,其sigmoid函数是深度学习最早使用来处理的)
速度最快的算法,可以很快对分类进行运算, 是大多是组合模型中初步筛选模型, 使用范围广泛
决策树(Decision Tree)
使用多种算法进行分类处理,但是需要进行剪枝处理,避免过拟合
KNN (K近邻)
采用距离方式预测分类结果,在大数据中不好计算,不好确定K值选择
朴素贝叶斯(比如:先用TF-IDF预处理然后朴素贝叶斯进行词频统计得到情感预测)
常用作文本分类,可以得到很好的处理效果
SVM
最好的单体学习器,可以使用该算法得到更好的鲁棒性
所有样本点都是可以用向量来表示的
集成学习(随机森林, GBDT, AdaBoost)
采用多个弱学习器进行计算操作效果,相比于单一学习器能够达到更高精度, 但是会牺牲计算时间
聚类(K-means是最常用的):
K-means
最简单好理解的聚类算法,需要设定K值进行计算,不能处理非凸数据集
DBSCAN
通过密度进行处理,可以找到高密度区域,有查找噪音的能力
GMM
能够对符合高斯分布的样本进行聚类处理,效果明显