1. Mercer定理
解析:任何半正定的函数都可以作为核函数。所谓半正定的函数,是指拥有训练数据集合,定义一个矩阵的元素,这个矩阵是的,如果这个矩阵是半正定的,那么就称为半正定的函数。这个Mercer定理不是核函数必要条件,只是一个充分条件,即还有不满足Mercer定理的函数也可以是核函数。
2. 最小二乘法与梯度下降法 [3]
解析:如果把最小二乘看做是优化问题,那么梯度下降是求解方法的一种(线性和非线性都可以),高斯-牛顿法和Levenberg-Marquardt则用于求解非线性最小二乘。
说明:梯度下降法:随机梯度下降法[SGD],批量梯度下降法[BGD],小批量梯度下降法[MBGD]。
3. hmmlearn [2]
解析:pip install -U --user hmmlearn
4. 特征选择
解析:根据特征选择形式,即特征是否发散,特征与目标的相关性。特征选择方法,如下所示:
[1]Filter[过滤法]:根据发散性或相关性对各个特征进行评分,设定阈值选择特征。
[2]Wrapper[包装法]:根据目标函数[通常是预测效果评分],每次选择若干特征,或者排除若干特征。
[3]Embedded[嵌入法]:先使用某些机器学习算法进行训练,得到各个特征的权值系数,根据权值系数从大到小选择特征。
5. Filter[过滤法]
[1]方差选择法
首先计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。如下所示:
from sklearn.feature_selection import VarianceThreshold
result = VarianceThreshold(threshold=3).fit_transform(iris.data)
[2]相关系数法
计算各个特征对目标值的相关系数以及相关系数的P值。如下所示:
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
import numpy as np
def function(X, y):
X = X.T
temp_tuple = []
for i in range(len(X)):
temp_tuple.append(pearsonr(X[i], y))
temp_list = []
for i in range(len(temp_tuple)):
temp_list.append(temp_tuple[i][0])
return np.array(temp_list)
result = SelectKBest(function, k=2).fit_transform(iris.data, iris.target)
[3]卡方检验
卡方分布是n个相互独立的服从标准正态分布的随机变量的平方和的分布。因此,卡方是没有负数的,卡方值越大P值就越小。如下所示:
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
temp = SelectKBest(chi2, k=2)
result = temp.fit_transform(iris.data, iris.target)
f_score = temp.scores_
f_pvalue = temp.pvalues_
[4]互信息法
互信息是联合分布与乘积分布的相对熵,如下所示:
使用最大信息系数法(Maximal Information Coefficient)选择特征,如下所示:
from sklearn.feature_selection import SelectKBest
from minepy import MINE
import numpy as np
def function(X, y):
X = X.T
m = MINE()
score_list = []
for i in range(len(X)):
m.compute_score(X[i], y)
score_list.append(m.mic())
return np.array(score_list)
result = SelectKBest(function, k=2).fit_transform(iris.data, iris.target)
6. Wrapper[包装法]
[1]递归特征消除法
递归特征消除法使用一个estimator[比如,SVM或者LR]来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于剩余的特征集进行下一轮训练。如下所示:
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
ref = RFE(estimator=LogisticRegression(), n_features_to_select=1)
result = ref.fit_transform(iris.data, iris.target)
print ref.ranking_
7. Embedded[嵌入法]
[1]基于惩罚项的特征选择法
使用feature_selection中的SelectFromModel类结合带L1惩罚项的逻辑回归模型,如下所示:
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
sfm = SelectFromModel(LogisticRegression(penalty="l1", C=0.1))
result = sfm.fit_transform(iris.data, iris.target)
说明:L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个,所以没选到的特征不代表不重要,可结合L2惩罚项来优化。
[2]基于树模型的特征选择法
使用feature_selection中的SelectFromModel类结合GBDT模型,如下所示:
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
sfm = SelectFromModel(GradientBoostingClassifier())
result = sfm.fit_transform(iris.data, iris.target)
8. 特征抽取与特征选择
解析:
[1]特征抽取:特征抽取后的新特征是原来特征的一个映射。特征抽取的方法主要是通过属性间的关系,比如组合不同的属性得到新的属性,这样就改变了原来的特征空间。
[2]特征选择:特征选择后的特征是原来特征的一个子集。特征选择的方法是从原始特征数据集中选择出子集,是一种包含关系,没有改变原始的特征空间。
9. PCA与LDA
[1]PCA
使用decomposition库的PCA类选择特征,如下所示:
from sklearn.decomposition import PCA
pca = PCA(n_components=2).fit_transform(iris.data)
[2]LDA
from sklearn.lda import LDA
lda = LDA(n_components=2).fit_transform(iris.data, iris.target)
说明:PCA和LDA本质都是将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。因此,PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。
10. 无量纲化
无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和区间缩放法。
的范围,比如[0,1]等。
[1]标准化[z-score标准化]
标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。如下所示:
使用preproccessing中的StandardScaler类对数据进行标准化,如下所示:
from sklearn.preprocessing import StandardScaler
result = StandardScaler().fit_transform(iris.data)
[2]区间缩放法
区间缩放法利用了边界值信息,将特征的取值区间缩放到某个特定的范围,比如[0, 1]等。如下所示:
使用preproccessing中的MinMaxScaler类对数据进行区间缩放,如下所示:
from sklearn.preprocessing import MinMaxScaler
result = MinMaxScaler().fit_transform(iris.data)
[3]标准化与归一化的区别
标准化依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。归一化依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或计算相似性时拥有统一的标准,也就是说都转化为“单位向量”。
使用preproccessing中的Normalizer类对数据进行归一化,如下所示:
from sklearn.preprocessing import Normalizer
result = Normalizer().fit_transform(iris.data)
11. 对定量特征二值化
使用preproccessing中的Binarizer类对数据进行二值化,如下所示:
from sklearn.preprocessing import Binarizer
result = Binarizer(threshold=3).fit_transform(iris.data)
12. 对定性特征哑编码
One-Hot编码使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只
有一位有效。举个例子,如下所示:
feature1=["male", "female"]
feature2=["from Europe", "from US", "from Asia"]
feature3=["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]
将其转换为One-Hot编码,如下所示:
feature1=[01,10]
feature2=[001,010,100]
feature3=[0001,0010,0100,1000]
样本["male", "from Asia", "uses Chrome"]的One-Hot编码,如下所示:
[01,00, 000,000,100, 0000,0010,0000,0000],简写[1,0, 0,0,1, 0,1,0,0]。
参考文献:
[1] 最小二乘法和梯度下降法有哪些区别?:最小二乘法和梯度下降法有哪些区别? - 知乎
[2] hmmlearn:hmmlearn — hmmlearn 0.2.7.post3+g51368b0 documentation
[3] 梯度下降法的三种形式BGD、SGD以及MBGD:[Machine Learning] 梯度下降法的三种形式BGD、SGD以及MBGD - Poll的笔记 - 博客园
[4] 机器学习中,有哪些特征选择的工程方法:机器学习中,有哪些特征选择的工程方法? - 知乎
[5] Feature selection:1.13. Feature selection — scikit-learn 1.0.2 documentation