admin 管理员组文章数量: 887021
2024年1月18日发(作者:什么是绕线式电动机)
简介: ...................................................................... 2
主要特点:................................................................... 2
scikit-learn安装:(ubuntu版本14.04.1) ......................................... 2
Classification .............................................................. 2
1.监督学习 ........................................................... 2
1.1广义线性模型: ................................................ 2
1.2 支持向量机 ................................................... 6
1.3 随机梯度下降 ................................................. 7
1.4 最近邻 ....................................................... 8
1.5 Gaussian Processes ............................................. 11
1.6 Cross decomposition ............................................ 11
1.7 Naive Bayes .................................................. 12
1.8 Decision Trees ................................................. 13
1.9 Ensemble methods ............................................. 14
1.10 Multiclass and multilabel algorithms .............................. 18
1.11 Feature selection .............................................. 19
1.14 Isotonic regression ............................................ 21
2. .................................................................. 21
2.3 Clustering .................................................... 21
2.5 Decomposing signals in components (matrix factorization problems) ...... 23
selection and evaluation ......................................... 23
3.1 Cross-validation: evaluating estimator performance .................... 23
3.2 Grid Search: Searching for estimator parameters ...................... 25
3.3 Pipeline: chaining estimators ..................................... 26
3.4 FeatureUnion: Combining feature extractors ......................... 27
3.5. Model evaluation: quantifying the quality of predictions ............... 27
3.6. Model persistence .............................................. 30
3.7. Validation curves: plotting scores to evaluate models .................. 30
4................................................................... 31
4.2 Preprocessing data .............................................. 31
4.4 Random Projection ............................................. 35
简介:
scikit-learn是一个用于机器学习的Python模块,建立在SciPy基础之上。
主要特点:
操作简单、高效的数据挖掘和数据分析
无访问限制,在任何情况下可重新使用
建立在NumPy、SciPy和matplotlib基础上
使用商业开源协议--BSD许可证
scikit-learn安装:(ubuntu版本14.04.1)
安装依赖:
sudo apt-get install build-essential python-dev python-numpy python-setuptools python-scipy libatlas-dev libatlas3-base python-matplotlib
安装pip
sudo apt-get install python-pip
安装scikit-learn
sudo pip install -U scikit-learn
标准库
Classification
1.监督学习
1.1广义线性模型:
1.1.1普通最小二乘法:
无偏估计的
通过计算最小二乘的损失函数的最小值来求得参数得出模型
通常用在观测有误差的情况,解决线性回归问题
y(w,x)w0w1x1....wpxp
求实际观测值与预测值差的平方最小值
数学公式:
是由_model模块中的LinearRegression类实现回归
LinearRegression的构造方法:
_Regression(fit_intercept=True #默认值为True,表示minwXwy22
计算随机变量,False表示不计算随机变量
, normalize=False #默认值为False,表示在回归前是否对回归因子X进行归一化,True表示是
, copy_X=True)
LinearRegression的属性有:coef_和intercept_。coef_存储w1到wp的值,与X的维数一致。intercept_存储
参考示例:
w0的值。
LinearRegression的常用方法有:
decision_function(X) #返回X的预测值y
fit(X,y[,n_jobs]) #拟合模型
get_params([deep]) #获取LinearRegression构造方法的参数信息
predict(X) #求预测值 #同decision_function
ytrueypre2 score(X,y[,sample_weight]) #计算公式为12yytruemeantrueset_params(**params) #设置LinearRegression构造方法的参数值
from sklearn import linear_model
X= [[0, 0], [1, 1], [2, 2]]
y = [0, 1, 2]
clf = linear_Regression()
(X, y)
print _
print ept_
print t([[3, 3]])
print on_function(X)
print (X, y)
print _params()
print _params(fit_intercept = False)
普通最小二乘法的复杂性:
2O(np)假设np 假设影响因素x为一个n行p列的矩阵那么其算法复杂度为缺点:要求每个影响因素相互独立,否则会出现随机误差。
回归用于解决预测值问题
1.1.2 Ridge回归
有偏估计的,回归系数更符合实际、更可靠,对病态数据的拟合要强于最小二乘
数学公式:minXwyw22w22
>=0,越大,w值越趋于一致
改良的最小二乘法,增加系数的平方和项和调整参数的积
是由_model模块中的Ridge类实现
Ridge回归用于解决两类问题:一是样本少于变量个数,二是变量间存在共线性
Ridge的构造方法:
_(alpha=1.0 #公式中的值,默认为1.0
, fit_intercept=True
, normalize=False
, copy_X=True
, max_iter=None #共轭梯度求解器的最大迭代次数
,tol=0.001 #默认值0.001
, solver='auto') #
Ridge回归复杂性:同最小二乘法
使用:
from sklearn import linear_model
X= [[0, 0], [1, 1], [2, 2]]
y = [0, 1, 2]
clf = linear_(alpha = 0.1)
(X, y)
print _
print ept_
print t([[3, 3]])
print on_function(X)
print (X, y)
print _params()
print _params(fit_intercept = False)
调整参数设置():通过广义交叉验证的方式(RidgeCV)设置调整参数
RidgeCV构造方法:
_V(alphas=array([ 0.1, 1., 10. ])
, fit_intercept=True
, normalize=False
, scoring=None #交叉验证发生器
, cv=None
, gcv_mode=None
, store_cv_values=False)
使用示例:
from sklearn import linear_model
X= [[0, 0], [1, 1], [2, 2]]
y = [0, 1, 2]
clf = linear_V(alpha = [0.1, 1.0, 10.0])
(X, y)
print _
print ept_
print t([[3, 3]])
print on_function(X)
print (X, y)
print _params()
print _params(fit_intercept = False)
1.1.3 Lasso
min数学公式:w12nsamplesXwy2w1
2估计稀疏系数的线性模型
适用于参数少的情况,因其产生稀疏矩阵,可用与特征提取
实现类是Lasso,此类用于监督分类
较好的解决回归分析中的多重共线性问题
思想:在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化
使用:clf = linear_(alpha = 0.1)
设置调整参数():
交叉验证:LassoCV(适用于高维数据集)或LassoLarsCV(适合于样本数据比观察数据小很多)
基于模式选择的信息标准:LassoLarsIC(BIC/AIC)
1.1.4 Elastic Net
是一个使用L1和L2训练的线性模型,适合于在参数很少的情况下(如Lasso)并保持Ridge性能的情况,既是多种影响因素依赖与另外一种因素。继承Ridge的旋转稳定性。
min数学表达式:w12nsamplesXwy2w12(1)2w2
2from _model import ElasticNet
enet = ElasticNet(alpha=alpha, l1_ratio=0.7)
求取和的值使用ElasticNetCV
1.1.5 Multi-task Lasso
用于估计y值不是一元的回归问题
用于估计联合多元回归问题的稀疏系数,y是一个2维矩阵(n_samples,n_tasks)。对于所有的回归问题,选的的因素必须相同,也叫tasks。
使用:clf = linear_askLasso(alpha=0.1)
1.1.6 Least Angle Regression
是一个计算高维数据的回归算法。实现类是_model中的Lars类
优点:
当维数大于点数的时候在上下文中是有效的
复杂度和最小二乘相同,但计算很快
产生一个分片解决方案路径用于交叉验证或相似的调整模型方法
缺点:
如果两个变量响应相关,则会有相同的增长率
很融合修改变成其他的评估方法
噪声敏感
使用:clf = linear_(n_nonzero_coefs=1)
1.1.7 LARS Lasso
是一个使用LARS算法实现的lasso模型。
使用:clf = linear_ars(alpha=0.01)
1.1.8 OMP(Orthogonal Matching Pursuit)
通过固定的非零元素数得到最优解
OMP基于贪心算法实现,每一步的原子项都与残余高度相关。
使用:
omp = OrthogonalMatchingPursuit(n_nonzero_coefs=n_nonzero_coefs)
omp_cv = OrthogonalMatchingPursuitCV()
1.1.9 贝叶斯回归(Bayesian Regression)
可以再估计过程包含正则化参数,参数可以手动设置,用于估计概率回归问题
优点:
缺点:
耗时
适用于手边数据
可用于在估计过程中包含正规化参数
Bayesian Ridge Regression:BayesianRidge用于估计回归问题的概率模型
用法:clf = linear_anRidge() By default
ARD(Automatic Relevance Determination ):类似于Bayesian Ridge Regression,但可产生稀疏的w值
用法:clf =
ARDRegression(compute_score=True)
1.1.10 逻辑回归
可以做概率预测,也可用于分类
仅能用于线性问题
通过计算真实值与预测值的概率,然后变换成损失函数,求损失函数最小值来计算模型参数从而得出模型
使用:
clf_l1_LR = LogisticRegression(C=C, penalty='l1', tol=0.01)
clf_l2_LR = LogisticRegression(C=C, penalty='l2', tol=0.01)
clf_l1_(X, y)
clf_l2_(X, y)
1.1.11 SGD(Stochastic Gradient Descent )
用于样本数据非常大的情况
由SGDClassifier和SGDRegressor
使用:
clf = linear_ressor()
clf = linear_ssifier()
对于SGDClassifier,当loss=”log”时拟合成一个逻辑回归模型,当loss=”hinge”时拟合成一个线性支持向量机
1.1.12 Perceptron
是另一个大规模学习的算法
不需要学习率
不是正则的
只有错误的时候更新模型
使用:同SGDClassifier
1.1.13 Passive Aggressive Algorithms
不要求学习率的时候同Perceptron,与Perceptron不同的是包含正则参数C
使用:同SGDClassifier
1.1.14 RANSAC(RANdom SAmple Consensus)
是一个从完整数据集中的一个子集中健壮估计参数的迭代算法,是非确定性算法,此算法把数据分成很多子集,根据子集估计
算法步骤:
(1)从原始数据中选择最小的随机样本,并检查数据时候有效(is_data_valid)
(2)根据(1)的随机子集拟合模型(base_),并检查模型是否有效(is_model_valid)
优模型。
使用:model_ransac = linear_Regressor(linear_Regression())
(3)通过计算估计模型的方法来分类数据
(4)如果临近样本数是最大的,并且当前的评估模型有同样的数则保存模型为最
1.1.15多项式回归
机器学习中的常见模式,使用线性模型训练数据的非线性函数
1.2 支持向量机
拟合出来的模型为一个超平面
解决与样本维数无关,适合做文本分类
解决小样本、非线性、高维
是用于分类、回归、孤立点检测的监督学习方法的集合。
优点:
缺点:
不适用于特征数远大于样本数的情况
不直接提供概率估计
有效的高维空间
维数大于样本数的时候仍然有效
在决策函数中使用训练函数的子集
通用(支持不同的内核函数:线性、多项式、s型等)
接受稠密和稀疏的输入
1.2.1 Classification
由SVC、NuSVC或LinearSVC实现,可进行多类分类
LinearSVC只支持线性分类
SVC和NuSVC实现一对一,LinearSVC实现一对多
使用:
clf = ()
lin_clf = SVC()
SVC、NuSVC和LinearSVC均无support_、support_vectors_和n_support_属性
1.2.2 回归
支持向量分类的方法也支持向量回归,有SVR和NuSVR,同分类一样,只是y向量需要是浮点数
使用:clf = ()
1.2.3 Density estimation, novelty detection
由OneClassSVM实现,是非监督学习,只需要一个X矩阵,没有类标签
1.2.4 Complexity
and
1.3 随机梯度下降
应用于大量稀疏的机器学习问题,输入数据为稀疏的
常用于文本分类和自然语言处理
是处理大样本数据的非常有效的方法
优点:
缺点:
需要一些调整参数
对尺度特征敏感
高效
易于实施
1.3.1 Classification
使用SGDClassifier实现,拟合参数为X[n_samples,n_features]和y[N_samples]
可以实现多类分类,此时是通过多个binary分类实现实现方式是one-vs-all(OVA),每一个binary分类把其中一个分出来,剩下的作为一个。测试的时候计算每一个分类器的得分并选择得分最高的
1.3.2 Regression
由SGDRegressor实现
1.3.3 复杂度
X为(n,p),则复杂度为O(knp)
1.4 最近邻
无监督的最近邻是其他学习方法的基础,监督的近邻学习分为:分类(数据有离散标记)和回归(数据有连续标记)
最近邻分类:计算待分类样本与训练样本中各个类的距离,求出距离最小的
K紧邻是求出k个最小的,然后计算分别属于某一类的个数,选个数最大的类,若相等则选择跟训练集中的序列有关
近邻分类:解决离散数据
近邻回归:解决连续数据
1.4.1 无监督的最近邻
由NearestNeighbors实现,在ors中,有三种算法:ball_tree(BallTree)、kd_tree(KDTree)、brute(brute-force)、auto(默认)
from ors import NearestNeighbors
tNeighbors(n_neighbors=5 #邻居数,默认为5
, radius=1.0 #参数空间范围,默认值为1.0
, algorithm='auto' #用于计算最近邻的算法(ball_tree、kd_tree、brute、auto)
, leaf_size=30 #传递给BallTree或KDTree叶大小
, metric='minkowski'
, p=2
, metric_params=None
, **kwargs)
使用:
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
distances, indices = bors(X)
1.4.1.2 KDTree and BallTree
使用:
X = ([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
kdt = KDTree(X, leaf_size=30, metric='euclidean')
(X, k=2, return_distance=False)
BallTree用法同KDTree
1.4.2 最近邻分类
是基于实例的非泛华学习,有两种不同的最近邻分类:KNeighborsClassifier和RadiusNeighborsClassifier(非均匀采样时比较合适)
KNeighborsClassifier:实现k近邻,k是一个用户输入的整数,k高度依赖与数据
borsClassifier(n_neighbors=5 #邻居数,默认为5
, weights='uniform' #用于预测的权重方法
, algorithm='auto' #用于计算最近邻的算法(ball_tree、kd_tree、brute、auto)
, leaf_size=30 #传递给BallTree或KDTree叶大小
, p=2 #
, metric='minkowski' #用于树的度量距离
, metric_params=None #度量参数
, **kwargs)
使用:
RadiusNeighborsClassifier:实现基于给定的半径r内的邻居数。用于不是均匀采样的数据,不适合高维参数空间的数据
NeighborsClassifier(radius=1.0
, weights='uniform' #参数空间范围
from ors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=3)
(X, y)
, algorithm='auto' #用于计算最近邻的算法(ball_tree、kd_tree、brute、auto)
, leaf_size=30 #传递给BallTree或KDTree叶大小
, p=2
, metric='minkowski' #用于树的度量距离
, outlier_label=None #离散群体的标签
, metric_params=None #度量参数
, **kwargs)
使用:
from ors import RadiusNeighborsClassifier
neigh = RadiusNeighborsClassifier(radius=1.0)
(X, y)
1.4.3 近邻回归
近邻回归用于标记数据是连续的情况,有两种不同的最近邻分类:KNeighborsRegressor和RadiusNeighborsRegressor
KNeighborsRegressor:实现k近邻,k是一个用户输入的整数
borsRegressor(n_neighbors=5
, weights='uniform'
法
, algorithm='auto'
法(ball_tree、kd_tree、brute、auto)
, leaf_size=30
KDTree叶大小
, p=2
, metric='minkowski'
, metric_params=None
, **kwargs)
使用:
from ors import KNeighborsRegressor
neigh = KNeighborsRegressor(n_neighbors=3)
(X, y)
RadiusNeighborsRegressor:实现基于给定的半径r内的邻居数。
NeighborsRegressor(radius=1.0
, weights='uniform'
, algorithm='auto'
算法(ball_tree、kd_tree、brute、auto)
, leaf_size=30
KDTree叶大小
, p=2
, metric='minkowski'
#邻居数,默认为5
#用于预测的权重方 #用于计算最近邻的算 #传递给BallTree或 #
#用于树的度量距离
#度量参数
#参数空间范围
#用于计算最近邻的 #传递给BallTree或 #用于树的度量距离
, outlier_label=None #离散群体的标签
, metric_params=None #度量参数
, **kwargs)
使用:
1.4.4 最近邻算法
1.4.4.1 Brute Force
搜索时通过ors中的algorithm参数设置为‘brute’实现,计算是通过se
此种方法计算效率低,D维空间的N个样本时间复杂度为1.4.4.2 K-D Tree
为了解决BruteForce计算效率低的问题,通过减少计算距离所需的数据实现,思想是:如果A距离B非常远,B距离C非常近,那么认为A与C距离非常远而不需要进行计算。相比于BruteForce,时间复杂度降低为1.4.4.3 BallTree
解决K-DTree高维空间效率低的问题
1.4.4.4 最近邻算法选择
N为样本数,D为维数,k表示邻居数
当N《=30的时候选择BruteForce比较合适
数据集结构化的时候,选择K-D Tree或K-D Tree
当k相当于与N来说变得非常大时选择BruteForce
如果查询点数少时BruteForce
1.4.4.5 leaf_size的影响
1)影响构建树的时间,leaf_size越大,构建树时间越短
2)影响查询时间,leaf_size最合适的值为30
3)影响内存,随着leaf_size的增大,存储内存减小
1.4.5 Nearest Centroid Classifier
,但高维数据空间效率低
from ors import RadiusNeighborsRegressor
neigh = RadiusNeighborsRegressor(radius=1.0)
(X, y)
构造方法:tCentroid(metric='euclidean'
用法:
X = ([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
y = ([1, 1, 1, 2, 2, 2])
clf = NearestCentroid()
(X, y)
, shrink_threshold=None)
1.5 Gaussian Processes
GPML是一种监督学习方法,主要用于解决回归问题,已经扩展到概率分类,但目前的研究只是一个回归练习的后处理
优点:
缺点:
非离散
高维空间效率低
分类仅仅是一个后处理
预测插值观测
预测是概率的,可以预测经验置信空间,改变预测值
通用
实现类是GaussianProcess
构造方法:an_anProcess(regr='constant' #回归函数返回信息
关信息
, beta0=None
权重向量
, storage_mode='full'
, verbose=False
, theta0=0.1
, thetaL=None
, thetaU=None
, optimizer='fmin_cobyla'
, random_start=1
#回归 , corr='squared_exponential' #自相
, normalize=True
, nugget=2.2231e-15
, random_state=None)
使用:
import numpy as np
from an_process import GaussianProcess
X = ([[1., 3., 5., 6., 7., 8.]]).T
y = (X * (X)).ravel()
gp = GaussianProcess(theta0=0.1, thetaL=.001, thetaU=1.)
(X, y)
1.6 Cross decomposition
包括两类算法PLS和CCA,用于计算两个多变数据集的线性相关,需要拟合的多变集X和Y是2D数组
当预测矩阵比实际数据有更多的变量时适合用PLS
1.7 Naive Bayes
Naive Bayes方法是监督学习的集合基于假设每对特征之间都是独立的贝叶斯理论
朴素贝叶斯方法是基于贝叶斯理论并假设每个特征都是独立的
应用于文档分类和垃圾邮件过滤
需要训练数据比较少
朴素贝叶斯通过计算属于每个类的概率并取概率最大的类作为预测类
naive Bayes is a decent classifier, but a bad estimator
1.7.1 Gaussian Naive Bayes
实现分类的是高斯贝叶斯算法是实现类GaussianNB
构造方法:_anNB
GaussianNB类构造方法无参数,属性值有:
示例:
class_prior_ #每一个类的概率
theta_ #每个类中各个特征的平均
sigma_ #每个类中各个特征的方差
import numpy as np
X = ([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = ([1, 1, 1, 2, 2, 2])
from _bayes import GaussianNB
clf = GaussianNB()
(X, Y)
GaussianNB类无score方法
1.7.2 Multinomial Naive Bayes
用于文本分类
用于处理多项离散数据集的Naive Bayes算法的类是Multinomial NB
构造方法:_omialNB(alpha=1.0 #平滑参数
示例:
import numpy as np
X = t(5, size=(6, 100))
y = ([1, 2, 3, 4, 5, 6])
from _bayes import MultinomialNB
clf = MultinomialNB()
(X, y)
1.7.3 Bernoulli Naive Bayes
处理根据multivariate Bernoulli离散的训练和分类数据算法,实现类是BernoulliNB
构造方法:_lliNB(alpha=1.0 #平滑参数
, binarize=0.0 #样本特征
, fit_prior=True #学习类的先验概率
, class_prior=None) #类的先验概率
阈值二值比
, fit_prior=True #学习类的先验概率
, class_prior=None) #类的先验概率
示例:
import numpy as np
X = t(2, size=(6, 100))
Y = ([1, 2, 3, 4, 4, 5])
from _bayes import BernoulliNB
clf = BernoulliNB()
(X, Y)
1.8 Decision Trees
是一个无参数的分类和回归的监督学习方法,目标是创建一个模型用于预测目标变量的值,通过学习从数据特征中推断出来的简单规则。
优点:
缺点:
可以创建复杂树但不能很好的推广
不稳定
是NP问题
有很难学习的概念
如果一些类占主导地位创建的树就有偏差
易于理解
只需要很少的准备数据
复杂度是数据点数的对数
能够同时处理数值和分类数据
能够处理多输出问题
采用白盒模型
使用统计测试可以验证模型
即使假设有点错误也可以表现很好
1.8.1 分类
实现类是DecisionTreeClassifier,能够执行数据集的多类分类
输入参数为两个数组X[n_samples,n_features]和y[n_samples],X为训练数据,y为训练数据的标记数据
DecisionTreeClassifier构造方法为:
onTreeClassifier(criterion='gini'
, splitter='best'
, max_depth=None
, min_samples_split=2
, min_samples_leaf=1
, max_features=None
, random_state=None
, min_density=None
, compute_importances=None
, max_leaf_nodes=None)
DecisionTreeClassifier示例:
from sklearn import tree
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = onTreeClassifier()
clf = (X, Y)
1.8.2 回归
实现类是DecisionTreeRegressor,输入为X,y同上,y为浮点数
DecisionTreeRegressor构造方法为:
onTreeRegressor(criterion='mse'
, splitter='best'
, max_depth=None
, min_samples_split=2
, min_samples_leaf=1
, max_features=None
, random_state=None
, min_density=None
, compute_importances=None
, max_leaf_nodes=None)
DecisionTreeRegressor示例:
from sklearn import tree
X = [[0, 0], [2, 2]]
y = [0.5, 2.5]
clf = onTreeRegressor()
clf = (X, y)
t([[1, 1]])
1.8.3 多输出问题
实现类有:DecisionTreeClassifier和DecisionTreeRegressor.
DecisionTreeClassifier构造方法:
onTreeClassifier(criterion='gini'
, splitter='best'
, max_depth=None
, min_samples_split=2
, min_samples_leaf=1
, max_features=None
, random_state=None
, min_density=None
, compute_importances=None
, max_leaf_nodes=None)
DecisionTreeClassifier示例:
from ts import load_iris
from _validation import cross_val_score
from import DecisionTreeClassifier
clf = DecisionTreeClassifier(random_state=0)
iris = load_iris()
cross_val_score(clf, , , cv=10)
DecisionTreeRegressor构造方法:
onTreeRegressor(criterion='mse'
, splitter='best'
, max_depth=None
, min_samples_split=2
, min_samples_leaf=1
, max_features=None
, random_state=None
, min_density=None
, compute_importances=None
, max_leaf_nodes=None)
DecisionTreeRegressor示例:
from ts import load_boston
from _validation import cross_val_score
from import DecisionTreeRegressor
boston = load_boston()
regressor = DecisionTreeRegressor(random_state=0)
cross_val_score(regressor, , , cv=10)
1.8.4 复杂度
1.9 Ensemble methods
目标是结合几种单一的估计方法进行预测值以提高通用和健壮性
两种方式:
1)多种组合方法单独进行估计,平均其得分
2)多种组合方法逐一估计
1.9.1 Bagging meta-estimator
实现类有BaggingClassifier(用于分类) 和BaggingRegressor(用于回归)
BaggingClassifier构造方法:
gClassifier(base_estimator=None
, n_estimators=10
, max_samples=1.0
, max_features=1.0
, bootstrap=True
, bootstrap_features=False
, oob_score=False
, n_jobs=1
, random_state=None, verbose=0)
BaggingClassifier示例:
from le import BaggingClassifier
from ors import KNeighborsClassifier
bagging = BaggingClassifier(KNeighborsClassifier(),max_samples=0.5, max_features=0.5)
BaggingRegressor构造方法:
gRegressor(base_estimator=None
, n_estimators=10
, max_samples=1.0
, max_features=1.0
, bootstrap=True
, bootstrap_features=False
, oob_score=False
, n_jobs=1
, random_state=None
, verbose=0)
1.9.2 Forests of randomized trees
1.9.2.1 Random Forests
实现类是RandomForestClassifier(分类)和RandomForestRegressor(回归)
RandomForestClassifier构造方法:
ForestClassifier(n_estimators=10
, criterion='gini'
, max_depth=None
, min_samples_split=2
, min_samples_leaf=1
, max_features='auto'
, max_leaf_nodes=None
, bootstrap=True
, oob_score=False
, n_jobs=1
, random_state=None
, verbose=0
, min_density=None
, compute_importances=None)
RandomForestClassifier示例:
from le import RandomForestClassifier
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = RandomForestClassifier(n_estimators=10)
clf = (X, Y)
RandomForestRegressor构造方法:
ForestRegressor(n_estimators=10
, criterion='mse'
, max_depth=None
, min_samples_split=2
, min_samples_leaf=1
, max_features='auto'
, max_leaf_nodes=None
, bootstrap=True
, oob_score=False
, n_jobs=1
, random_state=None
, verbose=0
, min_density=None
, compute_importances=None)
1.9.2.2 Extremely Randomized Trees
实现类是ExtraTreesClassifier (分类)和ExtraTreesRegressor(回归)
ExtraTreesClassifier构造方法:
reesClassifier(n_estimators=10
, criterion='gini'
, max_depth=None
, min_samples_split=2
, min_samples_leaf=1
, max_features='auto'
, max_leaf_nodes=None
, bootstrap=False
, oob_score=False
, n_jobs=1
, random_state=None
, verbose=0
, min_density=None
, compute_importances=None)
ExtraTreesRegressor构造方法:
reesRegressor(n_estimators=10
, criterion='mse'
, max_depth=None
, min_samples_split=2
, min_samples_leaf=1
, max_features='auto'
, max_leaf_nodes=None
, bootstrap=False
, oob_score=False
, n_jobs=1
, random_state=None
, verbose=0
, min_density=None
, compute_importances=None)
1.9.3 AdaBoost
实现类是AdaBoostClassifier(分类)和AdaBoostRegressor(回归)
AdaBoostClassifier构造方法:
stClassifier(base_estimator=None
, n_estimators=50
, learning_rate=1.0
, algorithm='SAMME.R'
, random_state=None)
AdaBoostClassifier示例:
from _validation import cross_val_score
from ts import load_iris
from le import AdaBoostClassifier
iris = load_iris()
clf = AdaBoostClassifier(n_estimators=100)
scores = cross_val_score(clf, , )
()
AdaBoostRegressor构造方法:
stRegressor(base_estimator=None
, n_estimators=50
, learning_rate=1.0
, loss='linear'
, random_state=None)
1.9.4 Gradient Tree Boosting
实现类是GradientBoostingClassifier(分类)和GradientBoostingRegressor(回归)
GradientBoostingClassifier构造方法:
ntBoostingClassifier(loss='deviance'
, learning_rate=0.1
, n_estimators=100
, subsample=1.0
, min_samples_split=2
, min_samples_leaf=1
, max_depth=3, init=None
, random_state=None
, max_features=None
, verbose=0
, max_leaf_nodes=None
, warm_start=False)
GradientBoostingClassifier示例:
from ts import make_hastie_10_2
from le import GradientBoostingClassifier
X, y = make_hastie_10_2(random_state=0)
X_train, X_test = X[:2000], X[2000:]
y_train, y_test = y[:2000], y[2000:]
clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,max_depth=1,
random_state=0).fit(X_train, y_train)
(X_test, y_test)
GradientBoostingRegressor构造方法:
GradientBoostingRegressor(loss='ls'
, learning_rate=0.1
, n_estimators=100
, subsample=1.0
, min_samples_split=2
, min_samples_leaf=1
, max_depth=3
, init=None
, random_state=None
, max_features=None
, alpha=0.9
, verbose=0
, max_leaf_nodes=None
, warm_start=False)
GradientBoostingRegressor示例:
import numpy as np
from s import mean_squared_error
from ts import make_friedman1
from le import GradientBoostingRegressor
X, y = make_friedman1(n_samples=1200, random_state=0, noise=1.0)
X_train, X_test = X[:200], X[200:]
y_train, y_test = y[:200], y[200:]
est = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1,max_depth=1,
random_state=0, loss='ls').fit(X_train, y_train)
mean_squared_error(y_test, t(X_test))
1.10 Multiclass and multilabel algorithms
1.10.1 Multilabel classification format
实现类是MultiLabelBinarizer
使用示例:
from ts import make_multilabel_classification
from cessing import MultiLabelBinarizer
X, Y = make_multilabel_classification(n_samples=5,
random_state=0,return_indicator=False)
Y
MultiLabelBinarizer().fit_transform(Y)
1.10.2 One-Vs-The-Rest
实现类是OneVsRestClassifier.
构造方法:
estClassifier(estimator, n_jobs=1)
使用示例:
from sklearn import datasets
from lass import OneVsRestClassifier
from import LinearSVC
iris = _iris()
X, y = ,
OneVsRestClassifier(LinearSVC(random_state=0)).fit(X, y).predict(X)
1.10.3 One-Vs-One
实现类是OneVsOneClassifier
构造方法:
neClassifier(estimator, n_jobs=1)
使用示例:
from sklearn import datasets
from lass import OneVsOneClassifier
from import LinearSVC
iris = _iris()
X, y = ,
OneVsOneClassifier(LinearSVC(random_state=0)).fit(X, y).predict(X)
1.10.4 Error-Correcting Output-Codes
实现类是OutputCodeClassifier
构造方法:
CodeClassifier(estimator, code_size=1.5, random_state=None,
n_jobs=1)
使用示例:
from sklearn import datasets
from lass import OutputCodeClassifier
from import LinearSVC
iris = _iris()
X, y = ,
clf = OutputCodeClassifier(LinearSVC(random_state=0),code_size=2, random_state=0)
(X, y).predict(X)
1.11 Feature selection
特征选择可以提高决策精度,提高高维数据性能
1.11.1 Removing features with low variance
实现类是VarianceThreshold
VarianceThreshold构造方法是:
e_ceThreshold(threshold=0.0)
VarianceThreshold示例:
from e_selection import VarianceThreshold
X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
_transform(X)
1.11.2 Univariate feature selection
实现类有:SelectKBest 、SelectPercentile和GenericUnivariateSelect
SelectKBest构造方法:
k=10)
SelectPercentile构造方法:
e_Percentile(score_func= e_KBest(score_func= 0x34fca28>, percentile=10) GenericUnivariateSelect构造方法: e_cUnivariateSelect(score_func= 0x34fca28>, mode='percentile', param=1e-05) 1.11.3 Recursive feature elimination 实现类是RFECV 构造方法为: e_(estimator, step=1, cv=None, loss_func=None, estimator_params={}, verbose=0) 示例: from ts import make_friedman1 from e_selection import RFECV from import SVR X, y = make_friedman1(n_samples=50, n_features=10, random_state=0) estimator = SVR(kernel="linear") selector = RFECV(estimator, step=1, cv=5) selector = (X, y) t_ g_ scoring=None, 1.11.4 L1-based feature selection 1.11.4.1 Selecting non-zero coefficients 实现类是linear_icRegression和SVC 1.11.4.2 Randomized sparse models 实现类是RandomizedLasso和RandomizedLogisticRegression 1.11.5 Tree-based feature selection 实现类是ExtraTreesClassifier 示例: from le import ExtraTreesClassifier from ts import load_iris iris = load_iris() X, y = , clf = ExtraTreesClassifier() X_new = (X, y).transform(X) e_importances_ X_ 1.12 Semi-Supervised 半监督的学习方法,用于训练数据中有一部分没有被标记,适用于少量有标记数据和大量已标记数据的的数据集 机器学习提高两种标记传播算法:LabelPropagation和LabelSpreading LabelPropagation构造方法: _ropagation(kernel='rbf' , gamma=20 , n_neighbors=7 , alpha=1 , max_iter=30 , tol=0.001) LabelPropagation示例: from sklearn import datasets from _supervised import LabelPropagation label_prop_model = LabelPropagation() iris = _iris() random_unlabeled_points = (_integers(0, 1,size=len())) labels = () labels[random_unlabeled_points] = -1 label_prop_(, labels) LabelSpreading构造方法: _preading(kernel='rbf' , gamma=20 , n_neighbors=7 , alpha=0.2 , max_iter=30 , tol=0.001) LabelSpreading示例: from sklearn import datasets from _supervised import LabelSpreading label_prop_model = LabelSpreading() iris = _iris() random_unlabeled_points = (_integers(0, 1,size=len())) labels = () labels[random_unlabeled_points] = -1 label_prop_(, labels) 1.13 Linear and quadratic discriminant analysis 线性判别分析(LDA)和二次判别分析(QDA)是两个经典的分类,因为他们的解释闭合的便于计算,LAD适合于判别线性边界,QDA适合于判别二次边界。 LDA构造方法: (n_components=None , priors=None) LDA示例: import numpy as np from import LDA X = ([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) y = ([1, 1, 1, 2, 2, 2]) clf = LDA() (X, y) QDA构造方法: (priors=None , reg_param=0.0) QDA示例: from import QDA import numpy as np X = ([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) y = ([1, 1, 1, 2, 2, 2]) clf = QDA() (X, y) LDA可用于将维。 1.14 Isotonic regression 拟合非递归数据集,实现类为IsotonicRegression 构造方法: icRegression(y_min=None #可选,默认为None , y_max=None #可选,默认为None , increasing=True , out_of_bounds='nan') 2. 2.3 Clustering 输入数据可以使各种各样的种矩阵 2.3.2 K-means 要求聚类的数目被指定,能很好的扩展到大数据样本,并且应用到不同领域的大范围领域中。 实现类是: KMeans KMeans构造方法: (n_clusters=8 , init='k-means++ ', n_init=10 , max_iter=300 , tol=0.0001 ,precompute_distances=True , verbose=0 , random_state=None , copy_x=True , n_jobs=1) 参考示例: from r import KMeans X = [[0],[1],[2]] y = [0,1,2] clf = KMeans(n_clusters=2) (X,y) 2.3.2.1 Mini Batch K-Means 是KMeans的一种变换,目的为了减少计算时间 实现类是MiniBatchKMeans MiniBatchKMeans构造方法: tchKMeans(n_clusters=8 , init='k-means++' , max_iter=100 , batch_size=100 , verbose=0 ,compute_labels=True , random_state=None , tol=0.0 , max_no_improvement=10 , init_size=None , n_init=3 ,reassignment_ratio=0.01) 参考示例: from r import MiniBatchKMeans X= [[1],[2],[3]] mbk = MiniBatchKMeans(init='k-means++', n_clusters=3, batch_size=batch_size, n_init=10, max_no_improvement=10, verbose=0) (X) 2.3.3 Affinity Propagation 创建集群通过在成对的样本间传递消息 实现类是AffinityPropagation AffinityPropagation构造方法: tyPropagation(damping=0.5 , max_iter=200 , convergence_iter=15 , copy=True ,preference=None , affinity='euclidean' , verbose=False) 参考示例: from r import AffinityPropagation X= [[1],[2],[3]] af = AffinityPropagation(preference=-50).fit(X) 2.3.4 Mean Shift 实现类是:MeanShift MeanShift构造方法: ift(bandwidth=None , seeds=None , bin_seeding=False , min_bin_freq=1 ,cluster_all=True) 参考示例: from r import MeanShift, estimate_bandwidth from s_generator import make_blobs centers = [[1, 1], [-1, -1], [1, -1]] X, _ = make_blobs(n_samples=10000, centers=centers, cluster_std=0.6) bandwidth = estimate_bandwidth(X, quantile=0.2, n_samples=500) ms = MeanShift(bandwidth=bandwidth, bin_seeding=True) (X) 2.3.5 Spectral clustering 实现类:SpectralClustering SpectralClustering构造方法: alClustering(n_clusters=8 , eigen_solver=None , random_state=None , n_init=10,gamma=1.0 , affinity='rbf' , n_neighbors=10 , eigen_tol=0.0 , assign_labels='kmeans' , degree=3 , coef0=1 ,kernel_params=None) 2.3.6 Hierarchical clustering 2.3.7 DBSCAN 2.3.8 Clustering performance evaluation 2.5 Decomposing signals in components (matrix factorization problems) 2.5.1 PCA selection and evaluation 3.1 Cross-validation: evaluating estimator performance 把数据集自动分成训练集和测试集的方法是 train_test_split 参考示例: import numpy as np from sklearn import cross_validation from sklearn import datasets from sklearn import svm iris = _iris() print , X_train, X_test, y_train, y_test = cross__test_split(, , test_size=0.4, random_state=0) print X_, y_ print X_, y_ clf = (kernel='linear', C=1).fit(X_train, y_train) (X_test, y_test) 3.3.1 Computing cross-validated metrics 调用 cross_val_score实现 参考示例: import numpy as np from sklearn import cross_validation from sklearn import datasets from sklearn import svm iris = _iris() print , X_train, X_test, y_train, y_test = cross__test_split(, , test_size=0.4, random_state=0) print X_, y_ print X_, y_ clf = (kernel='linear', C=1).fit(X_train, y_train) scores = cross__val_score(clf, , , cv=5) (X_test, y_test) 3.1.2 Cross validation iterators 3.1.2.1 K-fold 把所有的样本分成k组 实现类是KFold KFold 构造方法: _(n , n_folds=3 , indices=None , shuffle=False , random_state=None) 参考示例: import numpy as np from _validation import KFold kf = KFold(4, n_folds=2) for train, test in kf: print("%s %s" % (train, test)) 3.1.2.2 Stratified k-fold 实现类:StratifiedKFold _fiedKFold(y , n_folds=3 , indices=None , shuffle=False , random_state=None) 参考示例: import numpy as np from _validation import StratifiedKFold labels = [0, 0, 0, 0, 1, 1, 1, 1, 1, 1] skf = StratifiedKFold(labels, 3) for train, test in kf: print("%s %s" % (train, test)) 3.1.2.3 Leave-One-Out - LOO 实现类LeaveOneOut LeaveOneOut构造方法: _neOut(n , indices=None) 参考示例: from _validation import LeaveOneOut loo = LeaveOneOut(4) for train, test in loo: print("%s %s" % (train, test)) 3.1.2.4 Leave-P-Out - LPO 实现类:LeavePOut LeavePOut构造方法: _Out(n , p , indices=None) 参考示例: from _validation import LeavePOut lpo = LeavePOut(4, p=2) for train, test in lpo: print("%s %s" % (train, test)) 3.1.2.5 Leave-One-Label-Out - LOLO 实现类:LeaveOneLabelOut LeaveOneLabelOut构造方法: _neLabelOut(labels , indices=None) 参考示例: from _validation import LeaveOneLabelOut labels = [1, 1, 2, 2]lolo = LeaveOneLabelOut(labels) for train, test in lolo: print("%s %s" % (train, test)) 3.1.2.6 Leave-P-Label-Out 实现类:LeavePLabelOut LeavePLabelOut构造方法: _LabelOut(labels , p , indices=None) 参考示例: from _validation import LeavePLabelOut labels = [1, 1, 2, 2, 3, 3]lplo = LeavePLabelOut(labels, p=2) for train, test in lplo: print("%s %s" % (train, test)) 3.1.2.7 Random permutations cross-validation a.k.a. Shuffle & Split 实现类:ShuffleSplit ShuffleSplit构造方法: _eSplit(n , n_iter=10 , test_size=0.1 , train_size=None , indices=None ,random_state=None , n_iterations=None) 参考示例: from _validation import ShuffleSplit ss = cross_eSplit(5, n_iter=3, test_size=0.25, random_state=0) for train_index, test_index in ss: print("%s %s" % (train_index, test_index)) 3.2 Grid Search: Searching for estimator parameters 3.2.1 Exhaustive Grid Search 实现类是:GridSearchCV GridSearchCV构造方法: _archCV(estimator , param_grid , scoring=None , loss_func=None , score_func=None ,fit_params=None , n_jobs=1 , iid=True , refit=True , cv=None , verbose=0 , pre_dispatch='2*n_jobs') 使用示例: from sklearn import svm, grid_search, datasets iris = _iris() parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]} svr = () clf = grid_archCV(svr, parameters) (, ) 3.2.2 Randomized Parameter Optimization 实现类 RandomizedSearchCV RandomizedSearchCV构造方法: _izedSearchCV(estimator , param_distributions , n_iter=10 , scoring=None ,fit_params=None , n_jobs=1 , iid=True , refit=True , cv=None , verbose=0 , pre_dispatch='2*n_jobs' , random_state=None) 使用示例: from sklearn import svm, grid_search, datasets from le import RandomForestClassifier from _search import RandomizedSearchCV iris = _iris() X, y = , clf = RandomForestClassifier(n_estimators=20) param_dist = {"max_depth": [3, None], "max_features": sp_randint(1, 11), "min_samples_split": sp_randint(1, 11), "min_samples_leaf": sp_randint(1, 11), "bootstrap": [True, False], "criterion": ["gini", "entropy"]} n_iter_search = 20random_search = RandomizedSearchCV(clf, param_distributions=param_dist, n_iter=n_iter_search) random_(X, y) 3.3 Pipeline: chaining estimators 链接多个估计变成一个 方便:只需调用fit和predict即可 联合多个参数: 在Pipeline中所有的estimators(除去最后一个)必须是一个transformer(既是必须有transform方法) 3.3.1 Usage Pipeline构造方法: ne(steps) 参考示例: from ne import Pipeline from import SVC from osition import PCA estimators = [('reduce_dim', PCA()), ('svm', SVC())] clf = Pipeline(estimators) [0] 可用 make_pipeline方法替代Pipeline类,示例如下: from ne import make_pipeline from _bayes import MultinomialNB from cessing import Binarizer make_pipeline(Binarizer(), MultinomialNB()) 3.4 FeatureUnion: Combining feature extractors 联合多个transformer,但对数据进行fit的时候每个都是独立的 实现类是FeatureUnion FeatureUnion构造方法: eUnion(transformer_list #数据转换对象列表 , n_jobs=1 #并行运行作业数量 , transformer_weights=None) 3.4.1 Usage 参考示例: from ne import FeatureUnion from osition import PCA from osition import KernelPCA estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())] combined = FeatureUnion(estimators) 3.5. Model evaluation: quantifying the quality of predictions 模型评估有三种方法: 1)Estimator score method 2)Scoring parameter 3)Metric functions 3.5.1 The scoring parameter: defining model evaluation rules 3.5.1.1. Common cases: predefined values 设置3.1节中的参数scoring 的值 scoring 的有效值分别为: 1)Classification :'accuracy', 'average_precision', 'f1', 'log_loss', 'precision', 'recall', 'roc_auc' 2)Clustering: 'adjusted_rand_score' 3)Regression:'mean_absolute_error', 'mean_squared_error','r2' 若scoring 的值不为以上值则会出错 3.5.1.2. Defining your scoring strategy from score functions 3.5.2 Function for prediction-error metrics 测量预测误差 测量预测误差的方法在模块中提提供 模块中以_score结尾的返回值越大说明误差越小,以_error 或_loss 结尾的返回值越小说明误差越小 3.5.2.1 Classification metrics 3.5.2.1.1 Accuracy score 计算准确度得分由accuracy_score实现 accuracy_score原型: accuracy_score(y_true #实测值 , y_pred #预测值 , normalize=True #默认为True表示返回值为准确率,如果为False则返回正确的样本个数 , sample_weight=None) #样本权重 accuracy_score返回值: 1)若normalize=True则返回准确率 2)若normalize=False则返回正确的样本个数 使用示例: import numpy as np from s import accuracy_score y_pred = [0, 2, 1, 3] y_true = [0, 1, 2, 3] print accuracy_score(y_true, y_pred) print accuracy_score(y_true, y_pred, normalize=False) 多标签情况有问题:accuracy_score(([[0.0, 1.0], [1.0, 1.0]]), ((2, 2))) 3.5.2.1.2 Confusion matrix 使用示例: from s import confusion_matrix y_pred = [2, 0, 2, 2, 0, 1] y_true = [0, 0, 2, ,2, 0, 2] print confusion_matrix(y_true, y_pred) 3.5.2.1.3 Classification report 实现方法 classification_report classification_report原型: fication_report(y_true #实测值 , y_pred #预测值 , labels=None #标签 , target_names=None # 分类名称 , sample_weight=None) #样本权重 使用示例: from s import classification_report y_pred = [0, 1, 2, 2, 0] y_true = [0, 0, 2, ,2, 0] target_names = [‘class 0’,’class 1’,’class 2’] print classification_report(y_true, y_pred, target_names = target_names) 3.5.2.1.4 Hamming loss 计算两个样本集中对应位置不相等的数据的数量所占的比例 实现方法是: hamming_loss hamming_loss原型: g_loss(y_true , y_pred , classes=None) 使用示例: from s import hamming_loss y_pred = [1, 2, 3, 4] y_true = [2, 2, 3, 4] print hamming_loss(y_true, y_pred) hamming_loss(([[0.0, 1.0], [1.0, 1.0]]), ((2, 2))) 多标签情况,测试结果与给出结果不一致 3.5.2.1.5 Jaccard similarity coefficient score 由 jaccard_similarity_score 方法实现 jaccard_similarity_score原型: d_similarity_score(y_true , y_pred , normalize=True) 使用示例: import numpy as np from s import jaccard_similarity_score y_pred = [0, 2, 1, 3] y_true = [0, 1, 2, 3] print jaccard_similarity_score(y_true, y_pred) print jaccard_similarity_score(y_true, y_pred, normalize=False) print jaccard_similarity_score(([[0.0, 1.0], [1.0, 1.0]]), ((2, 2))) 3.5.2.1.6. Precision, recall and F-measures 实现方法:precision_recall_curve和 average_precision_score precision_recall_curve原型: ion_recall_curve(y_true , probas_pred , pos_label=None , sample_weight=None) precision_recall_curve使用示例: import numpy as npfrom s import precision_recall_curve y_true = ([0, 0, 1, 1]) y_scores = ([0.1, 0.4, 0.35, 0.8]) precision, recall, thresholds = precision_recall_curve( y_true, y_scores) print precision print recall print thresholds precision_recall_curve只能用于数据为0或1的情况 average_precision_score原型: e_precision_score(y_true , y_score , average='macro' , sample_weight=None) 返回值为average_precision average_precision_score使用示例: import numpy as np from s import average_precision_score y_true = ([0, 0, 1, 1]) y_scores = ([0.1, 0.4, 0.35, 0.8]) print average_precision_score(y_true, y_scores) average_precision_score只能用于数据为0或1的情况 3.5.2.1.7 Hinge loss 实现方法是 hinge_loss hinge_loss原型: _loss(y_true , pred_decision , pos_label=None , neg_label=None) 使用示例: from sklearn import svm from s import hinge_loss X = [[0], [1]] y = [-1, 1] est = SVC(random_state=0) (X, y) pred_decision = on_function([[-2], [3], [0.5]]) print pred_decision print hinge_loss([-1, 1, 1], pred_decision) 3.5.2.1.8. Log loss 实现方法:log_loss log_loss原型: _loss(y_true , y_pred , eps=1e-15 , normalize=True) 使用示例: from s import log_loss y_true = [0, 0, 1, 1] y_pred = [[.9, .1], [.8, .2], [.3, .7], [.01, .99]] log_loss(y_true, y_pred) 3.6. Model persistence 3.6.1 Persistence example 实现持久化的类是pickle 参考示例: from sklearn import svm from sklearn import datasets clf = () iris = _iris() X, y = , (X, y) import pickle s = (clf) clf2 = (s) print t(X[0]) 3.7. Validation curves: plotting scores to evaluate models 高维空间,模型不直观,因此需要选择曲线验证来验证模型的合理性 3.7.1 Validation curve 参数值对学习分数的影响曲线 这一功能由 validation_curve完成,示例如下 参考示例: import numpy as np from ng_curve import validation_curve from ts import load_iris from _model import Ridge (0) iris = load_iris() X, y = , indices = ([0]) e(indices) X, y = X[indices], y[indices] train_scores, valid_scores = validation_curve(Ridge(), X, y, "alpha", ce(-7, 3, 3)) print train_scores print valid_scores train_scores小 valid_scores大时最好,或者两者都大 3.7.2 Learning curve 通过改变训练样本数目学习分数的影响曲线 训练样本数目对 learning_curve train_scores远大于 valid_scores比较好 参考例子: import numpy as np from ng_curve import learning_curve from ts import load_iris from import SVC (0) iris = load_iris() X, y = , indices = ([0]) e(indices) X, y = X[indices], y[indices] train_sizes, train_scores, valid_scores = learning_curve(SVC(kernel='linear'), X, y, train_sizes=[50, 80, 110], cv=5) print train_sizes print train_scores print valid_scores 4. 4.2 Preprocessing data 4.2.1 标准化 标准化方法:scale scale构造方法: (X #要进行标准化的数据 , axis=0 , with_mean=True #是否计算均值 , with_std=True #是否计算标准差 , copy=True) 参考示例: from sklearn import preprocessing import numpy as np X = ([[ 1., -1., 2.], [ 2., 0., 0.], [ 0., 1., -1.]]) X_scaled = (X) print X_scaled print X_(axis=0) print X_(axis=0) cessing模块提供StandardScaler 用于实现Transformer API 基于训练数据计算均值和标准差,此类适合于ne 早期步骤 StandardScaler 的属性为:mean_和std_ StandardScaler 构造方法: rdScaler(copy=True , with_mean=True #是否计算平均值 , with_std=True) #是否计算标准差 参考示例: from sklearn import preprocessing import numpy as np X = ([[ 1., -1., 2.], [ 2., 0., 0.], [ 0., 1., -1.]]) scaler = rdScaler().fit(X) print _ print _ orm(X) orm([-1., 1., 0.]) 把数据缩放到一个范围,常常是0-1的范围,这时可以直接使用MinMaxScaler MinMaxScaler构造方法: Scaler(feature_range=(0, 1) #要缩放的范围,默认为0-1 , copy=True) MinMaxScaler有两个属性:min_和scale_ 参考示例: from sklearn import preprocessing import numpy as np X_train = ([[ 1., -1., 2.], [ 2., 0., 0.], [ 0., 1., -1.]]) min_max_scaler = Scaler() X_train_minmax = min_max__transform(X_train) print X_train_minmax print min_max__transform([-3., -1., 4.]) print min_max__ print min_max__ 4.2.2 常规化 计算二次型 常规化方法:normalize normalize构造方法: ize(X , norm='l2' , axis=1 , copy=True) 参考示例: from sklearn import preprocessing X = [[ 1., -1., 2.], [ 2., 0., 0.], [ 0., 1., -1.]] X_normalized = ize(X, norm='l2') print X_normalized cessing模块提供 Normalizer 用于实现Transformer API Normalizer 构造方法: izer(norm='l2' , copy=True) 此类适合于ne 早期步骤 参考示例: from sklearn import preprocessing X = [[ 1., -1., 2.], [ 2., 0., 0.], [ 0., 1., -1.]] normalizer = izer().fit(X) print orm(X) orm([[-1., 1., 0.]]) 4.2.3 Binarization 适合下行概率估计 实现类:Binarizer (此类适合于ne 早期步骤) Binarizer 构造方法: zer(threshold=0.0 #阈值,特征小于或等于此值用0代替,大于用1代替,默认值为0.0 , copy=True) 参考示例: from sklearn import preprocessing X = [[ 1., -1., 2.], [ 2., 0., 0.], [ 0., 1., -1.]] binarizer = zer().fit(X) print orm(X) binarizer = zer(threshold=1.1) print orm(X) 4.2.4 Encoding categorical features 实现编码分类特征并可用于机器学习估计的类是OneHotEncoder OneHotEncoder构造方法: Encoder(n_values='auto' #每个特征值得数量(‘auto’,‘int’,‘array’),默认为auto , categorical_features='all' #指定被分类的特征(‘all’,‘array’,‘mask’),默认all , dtype= ,sparse=True) #若设置将返回稀疏矩阵 参考示例: from sklearn import preprocessing enc = Encoder() ([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) print orm([[0, 1, 3]]).toarray() 4.2.5 标签预处理 4.2.5.1 Label binarization 实现类是LabelBinarizer LabelBinarizer构造方法: inarizer(neg_label=0 #负值标签必须编码 , pos_label=1 #正值标签必须编码 , sparse_output=False) #返回稀疏矩阵 参考示例: from sklearn import preprocessing lb = inarizer() ([1, 2, 6, 4, 2]) print s_ print orm([1, 6]) 多标签实现类: MultiLabelBinarizer MultiLabelBinarizer构造方法: abelBinarizer(classes=None , sparse_output=False) 参考示例: from sklearn import preprocessing lb = abelBinarizer() print _transform([(1, 2), (3,)]) print s_ 4.2.5.2 Label encoding 实现类是LabelEncoder 编码标签的值是0-n_classes-1,用于写出高效的Cython程序 参考示例: from sklearn import preprocessing le = ncoder() ([1, 2, 2, 6]) print s_ print orm([1, 1, 2, 6]) print e_transform([0, 0, 1, 2]) 4.2.6 Imputation of missing values 实现类Imputer Imputer构造方法: r(missing_values='NaN' #缺失值得占位符 , strategy='mean' #替换缺失值得方法(mean、median、most_frequent) , axis=0 #填补缺失值的方向(0表示列、1表示行) , verbose=0 , copy=True) 参考示例: from cessing import Imputer import numpy as np imp = Imputer(missing_values='NaN', strategy='mean', axis=0) ([[1, 2], [, 3], [7, 6]]) X = [[, 2], [6, ], [7, 6]] print(orm(X)) 4.2.7 Unsupervised data reduction 特征特别多的情况下需要减少特征 4.2.7.1 PCA (n_components=None , copy=True , whiten=False) 参考示例: import numpy as np from osition import PCA X = ([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) pca = PCA(n_components=2) (X) print(ned_variance_ratio_) 4.2.7.2 Random projections 见4.4 4.2.7.3 Feature agglometration 见2.3.6 4.4 Random Projection
版权声明:本文标题:scikit-learn 学习主要知识点 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1705549542h489507.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论