1. 机器学习基本类型
-
有监督学习:
根据已知的输入和输出,建立联系它们的模型,根据该模型对未知输出的输入进行判断。
1)回归
:以无限连续域的形式表示输出
2)分类
:以有限离散域的形式表示输出监督学习又可以划分为生成模型和判别模型。
生成模型
:
由数据学习联合概率分布P(X,Y), 然后求出条件概率分布P(Y|X)作为预测的模型。 典型的有:朴素贝叶斯法
和隐马尔科夫模型
。判别模型
:
由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测的模型。典型的有:K近邻法
,感知机
,决策树
,逻辑回归模型
,支持向量机
,提升方法
和条件随机场
等。
-
无监督学习:
在一组没有已知输出(标签)的输入中,根据数据的内部特征和练习,找到某种规则,进行族群的划分—聚类
-
半监督学习:
从一个相对有限的已知结构中利用有监督学习的方法,构建基本模型,通过对未知输入和已知输入的必读判断其输出,扩展原有的已知领域。(知识库的自我扩展)
- 常见算法:
2.数据预处理
特征处理常用方法:
机器学习之数据预处理(均值移除、范围缩放、归一化、二值化、独热编码、标签编码)
时间序列的特征处理常用方法:
时间特征连续化
:连续的时间差值
法,即计算出所有样本的时间到某一个未来时间之间的数值差距,这样这个差距是UTC的时间差,从而将时间特征转化为连续值
;时间特征离散化
:根据时间所在的年,月,日,星期几,小时数,将一个时间特征转化为若干个离散特征,这种方法对分析具有明显时间趋势的问题比较好用;权重法
:即根据时间的新旧得到一个权重值。比如对于商品,三个月前购买的设置一个较低的权重,最近三天购买的设置一个中等的权重,在三个月内但是三天前的设置一个较大的权重等。
-
补充基础概率:
-1) 范数:0 范数、1 范数、2 范数有什么区别?l1即L1范数,矢量中各元素绝对值之和 l2即L2范数,矢量元素绝对值的平方和再开方 (Euclid范数--欧几里得范数,常用计算向量长度 p范数,矢量元素绝对值的p次方和的1/p次幂
-2)空间度量
在平面内,对于点 P (x_1,y_1) 与点 Q (x_2,y_2) 我们所遇到的常见的距离有三种:
曼哈顿距离是欧几里得空间中两点之间的线段在坐标轴上的投影的距离的和
(欧几里得:点距离;曼哈顿:垂直距离或投影距离)
3. 常用的特征选择方法
参考:几种常用的特征选择方法
1) 特征选择作用
- 减少特征数量、降维,使模型泛化能力更强,减少过拟合
- 增强对特征和特征值之间的理解
NOTE:
a) 特征选择
和降维
:
相似:效果一致,试图去减少特征数据集中特征的数目
差异:(特征空间是否改变
)
- 特征选择
是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间
- 降维
是通过属性间的关系,如组合不同的属性得新的属性,改变了原来的特征空间
b)
2)特征选择主要方法
- 根据方差移除特征 Removing features with low variance
假设某特征(无缺失值或无穷)的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,反映在统计量上就是方差过小 low variance
,也就是样本在这个特征上变化很小。
# Remove features with variance lower than 0.2
from sklearn.feature_selection import VarianceThreshold
sel = VarianceThreshold(0.2)
data_VarT = sel.fit_transform(dataset)
NOTE:
1)实际问题中,低方差的数据并不一定代表着其不是有效数据,移除低方差数据带来的可能并不是模型性能的提升,而是下降。
2)阈值threshold设定的合理性是否能够得到保证
- 单一变量特征选择 Univariate feature selection
单一变量选择就是通过某种得分来度量相关性,进而选择特征,sklearn中有两个比较常用 :
- SelectKBest :选择前k个最好的特征,也就是得分最高的K个
- SelectPercentile :选择前百分之几的特征,这个百分比由用户指定
衡量相关性方法:卡方检验
,F-检验
以及互信息
三种衡量方法对于回归和分类是不同的:
回归:f_regression, mutual_info_regression
分类:chi2, f_classif, mutual_info_classif
互信息(mutual_info_regression, mutual_info_classif
)可以得到特征和最后的结果之间的非线性的相关性,而卡方检验和F-检验应该只能够判断线性。
互信息:度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度
卡方检验:用方差来衡量某个观测频率和理论频率之间差异性的方法
python代码():SelectPercentile(method, params).fit_transform(x,y)
sklearn.feature_selection import f_regression
from sklearn.feature_selection import SelectPercentile
# x.shape: (1456, 388)
# y.shape: (1456, 1)
datanew = SelectPercentile(f_regression, 30).fit_transform(x,y)
datanew.shape
Out[71]: (1456, 117) # features reduce from 388 to 117 with 30% percentage
- 递归特征消除 RFE
给定一个具有coef_或者feature_importance_属性的模型,利用base model训练这些相关性特征,删除得分最差的特征,重复训练直到满足预设的特征个数。
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select=5).fit_transform(x, y)
- SelectFromModel
类似RFE,参数为base model和threshold.
- base model: The estimator must have either a
feature_importances_
orcoef_
attribute after fitting - threshold:the threshold value to use for feature selection. – importance score [0,1]
from sklearn.feature_selection import SelectFromModel
# Set a minimum threshold of 0.3
sfm= SelectFromModel(Lasso(), threshold=0.3)
sfm.fit(X, y)
n_features = sfm.transform(X).shape[1]
- 线性模型和正则化
正则化模型:
- 线性回归 + L1正则项: Lasso(alpha)
- 线性回归 + L2正则项: Ridge(alpha, solver)
- 线性回归 + 正则项([L1,L2]):ElasticNet(alpha, l1_ratio)
实际使用中,如果特征是高维稀疏的,则使用L1正则;如果特征是低维稠密的,则使用L2正则。
L2不能控制feature的“个数”,但是能防止模型overfit到某个feature上;相反L1是控制feature“个数”的,并且鼓励模型在少量几个feature上有较大的权重。
L1正则化:
L1正则化
将系数w的l1范数作为惩罚项加到损失函数上,由于正则项非零,这就迫使那些弱的特征所对应的系数变成0
。因此L1正则化往往会使学到的模型很稀疏(系数w经常为0)
,这个特性使得L1正则化成为一种很好的特征选择方法。
L1正则化像非正则化线性模型一样也是不稳定的,如果特征集合中具有相关联的特征,当数据发生细微变化时也有可能导致很大的模型差异。
L2正则化:
L2正则化
将系数向量的L2范数添加到了损失函数中。由于L2惩罚项中系数是二次方的,这使得L2和L1有着诸多差异,最明显的一点就是,L2正则化会让系数的取值变得平均
。
对于关联特征,这意味着他们能够获得更相近的对应系数。还是以Y=X1+X2为例,假设X1和X2具有很强的关联,如果用L1正则化,不论学到的模型是Y=X1+X2还是Y=2X1,惩罚都是一样的,都是2 alpha。
但是对于L2来说,第一个模型的惩罚项是2 alpha,但第二个模型的是4*alpha。可以看出,系数之和为常数时,各系数相等时惩罚是最小的,所以才有了L2会让各个系数趋于相同的特点
。
L2正则化对于特征选择来说一种稳定的模型
,L1正则化系数会因为细微的数据变化而波动
。所以L2正则化和L1正则化提供的价值是不同的,L2正则化对于特征理解来说更加有用:表示能力强的特征对应的系数是非零。
from sklearn.linear_model import Lasso
lasso = Lasso(alpha=0.03)
lasso.fit(X, Y)
coefs = lasso.coef_ # 特征系数
-决策树模型的特征选择(xgboost,gboost,randomforest,cart…)
1)结合业务优先选择有限的主要特征,划分子表,降低决策树的高度。
缺点:特征数量多的时候,决策树可能层级过高
2)决策树学习应用信息增益准则(信息增益或信息增益比)
选择特征。
决策树根据香农定理计算根据每一个特征划分子表前后的信息熵差,选择熵减少量最大的特征,优先参与子表划分
信息增益
g(D,A):得知特征A的信息而使得对数据集D的分类的不确定性减少的程度(即熵减程度 = 经验熵H(D) - 经验条件熵H(D|A)).
g(D,A) = H(D) - H(D|A)
.
信息增益准则的特征选择方法
:
对训练数据集(或子集)D,计算其每个特征的信息增益,选择信息增益最大的特征
。
缺陷:
- 存在偏向于选择取值较多的特征的问题;
- 对于关联特征,先被选中的特征重要度很高,其他的关联特征重要度往往较低,在理解特征时会造成误解。
信息增益比
:特征A对训练数据集D的信息增益比g(D,A;R)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵H(D;A)之比。
g(D,A;R) = g(D,A) / H(D;A)
.
对于基于模型的特征选择来说,关联特征的打分基本都会存在不稳定的现象。
4. 算法
- 聚类
1、K-均值算法
- 概述:
K-means算法是很典型的基于距离(欧几里得距离)
的聚类算法,采用距离作为相似性的评价指标