数据预处理

二元化

模型原型

class sklearn.preprocessing.Binarizer(threshold=0.0,copy=True)
参数

  • threshold:指定属性阙值
  • copy:如果为True,则执行原地修改

方法

  • fit(X,[,y]):不做任何事,主要用于流水线Pipeline
  • transform(X[,y,copy]):将每一个样本的属性二元化
  • fit_transform(X[,y]):将每一个样本的属性二元化

示例

from sklearn.preprocessing import Binarizer
X=[
    [1,2,3,4,5],
    [5,4,3,2,1],
    [3,3,3,3,3],
    [1,1,1,1,1]
]
print('before transform:\n',X)
binarizer=Binarizer(threshold=2.5)
print('after transform:\n',binarizer.transform(X))

独热码

模型原型

class sklearn.preprocessing.OneHotEncoder(n_values=’auto’,categorical_features=’all’,dtype=/, sparse=True,handle_unknown=’error’)
参数

  • n_values:指定每个属性的上界
    • ’auto’:自动从训练数据中推断属性值取值的上界
    • 一个整数:指定所有属性取值的上界
    • 一个整数的数组:依次指定每个属性的上界
  • categorical_features:指定哪些属性需要编码独热码
    • ’all’
    • 一个下标的数组:指定下标的属性将编码为独热码
    • 一个mask:对应为True的属性将编码为独热码
  • dtype:指定独热码编码的数值类型(默认为np.float)
  • sparse:指定结果是否为稀疏
  • handle_unknown:如果进行数据转换时,遇到了某个集合类型的属性,但是该属性未列入categorical_features时的情形,可以指定为
    • ’error’:抛出异常
    • ‘ignore’:忽略

属性

  • activefeatures:激活特征
  • featureindices:原始数据的第i个属性对应转换后数据的
  • (featureindices[i],featureindices[i+1])之间的属性
  • n_values:存放每个属性取值的种类

方法

  • fit(X,[,y]):训练OneHotEncoder
  • transform(X[,y,copy]):对原始数据执行独热码编码
  • fit_transform(X[,y])

示例

from sklearn.preprocessing import OneHotEncoder
X=[
    [1,2,3,4,5],
    [5,4,3,2,1],
    [3,3,3,3,3],
    [1,1,1,1,1]
]
print('before transform:\n',X)
encoder=OneHotEncoder(sparse=False)
encoder.fit(X)
print('active_features_:\n',encoder.active_features_)
print('feature_indices_:\n',encoder.feature_indices_)
print('n_values_:\n',encoder.n_values_)
print('after transform:\n',encoder.transform([[1,2,3,4,5]]))

标准化

MinMaxScaler

模型原型

class sklearn.preprocessing.MinMaxScaler(feature_range=(0,1),copy=True)
参数

  • feature_range:指定预期变换后属性的取值范围
  • copy:如果为True,则执行原地修改

属性

  • min_:一个数组,给出每个属性的原始的最小值调整值
  • scale_:一个数组,给出每个属性的缩放倍数
  • data_min_
  • data_max_
  • data_range_

方法

  • fit(X,[,y]):计算每个属性的最大值,最小值,为后续的转换做准备
  • transform(X):执行属性标准化
  • fit_transform(X[,y])
  • inverse_transform(X):逆标准化,还原成原始数据
  • partial_fit(X[,y]):批量学习,学习部分数据

示例

from sklearn.preprocessing import MinMaxScaler
X=[
    [1,5,1,2,10],
    [2,6,3,2,7],
    [3,7,5,6,4],
    [4,8,7,8,1]
]
print('before transform:\n',X)
scaler=MinMaxScaler(feature_range=(0,2))
scaler.fit(X)
print('min_ :\n',scaler.min_)
print('scale_:\b',scaler.scale_)
print('data_max_:\n',scaler.data_max_)
print('sata_min_:\n',scaler.data_min_)
print('data_range_:\n',scaler.data_range_)
print('after transform:\n',scaler.transform(X))

MaxAbsScaler

模型原型

class sklearn.preprocessing.MaxAbsScaler(copy=True)
参数

  • copy:如果为True,则执行原地修改

属性

  • scale_:一个数组,给出每个属性的缩放倍数的倒数
  • maxabs:一个数组,给出每个属性的绝对值的最大值
  • n_samplesseen:一个整数,给出当前已经处理的样本的数量(用于分批训练)

方法

  • fit(X,[,y]):计算每个属性绝对值的最大值,为后续的转换做准备
  • transform(X):执行属性标准化
  • fit_transform(X[,y])
  • inverse_transform(X):逆标准化,还原成原始数据
  • partial_fit(X[,y]):批量学习,学习部分数据

示例

from sklearn.preprocessing import MaxAbsScaler
X=[
    [1,5,1,2,10],
    [2,6,3,2,7],
    [3,7,5,6,4],
    [4,8,7,8,1]
]
print('before transform:\n',X)
scaler=MaxAbsScaler()
scaler.fit(X)
print('scale_:\n',scaler.scale_)
print('max_abs_is:\n',scaler.max_abs_)
print('after transform:\n',scaler.transform(X))

StandardScaler

模型原型

class sklearn.preprocessing.StandardScaler(copy=True,with_mean=True,with_std=True)
参数

  • copy:如果为True,则执行原地修改
  • with_mean:如果为True,则缩放之前先将数据中心化(属性值减去均值)
  • with_std:如果为True,则缩放数据到单位方差

属性

  • scale_:一个数组,给出每个属性的缩放倍数的倒数
  • maxabs:一个数组,给出每个属性的绝对值的最大值
  • n_samplesseen:一个整数,给出当前已经处理的样本的数量(用于分批训练)

方法

  • fit(X,[,y]):计算每个属性方差和标准差,为后续的转换做准备
  • transform(X):执行属性标准化
  • fit_transform(X[,y])
  • inverse_transform(X):逆标准化,还原成原始数据
  • partial_fit(X[,y]):批量学习,学习部分数据

示例

from sklearn.preprocessing import StandardScaler
X=[
    [1,5,1,2,10],
    [2,6,3,2,7],
    [3,7,5,6,4],
    [4,8,7,8,1]
]
print('before transform:\n',X)
scaler=StandardScaler()
scaler.fit(X)
print('scale_:\n',scaler.scale_)
print('mean_:\n',scaler.mean_)
print('var_:\n',scaler.var_)
print('after transform:\n',scaler.transform(X))

正则化

模型原型

class sklearn.preprocessing.Normalizer(norm=’l2,copy=True)
参数

  • norm:指定正则化方法

  l1:采用L1L1范数正则化
  l2:采用L2L2范数正则化
  max:采用LL∞范数正则化

  • copy:如果为True,则执行原地修改

方法

  • fit(X,[,y]):不做任何事,主要用于流水线Pipeline
  • transform(X[,y,copy]):将每一个样本正则化为范数1
  • fit_transform(X[,y])

示例

from sklearn.preprocessing import Normalizer
X=[
    [1,2,3,4,5],
    [5,4,3,2,1],
    [1,3,5,2,4],
    [2,4,1,3,5]
]
print('before transform:\n',X)
normalizer=Normalizer(norm='l2')
print('after transform:\n',normalizer.transform(X))

过滤式特征选取

VarianceThreshold

模型原型

class sklearn.feature_selection.VarianceThreshold(threshold=0.0)
参数

  • threshold:指定预期变换后属性的取值范围,指定方差的阙值,低于此阙值将被剔除

属性

  • variances_:一个数组,分别为各属性的方差

方法

  • fit(X,[,y]):从样本数据中学习方差
  • transform(X):执行属性标准化,执行特征选择(删除低于阙值的属性)
  • fit_transform(X[,y])
  • get_support([indices])
    • True:返回被选出的特征的下标
    • False:返回一个布尔值组成的数组,该数组指示哪些特征被选中
  • inverse_transform(X):逆标准化,还原成原始数据

示例

from sklearn.feature_selection import VarianceThreshold
X=[
    [100,1,2,3],
    [100,4,5,6],
    [100,7,8,9],
    [101,11,12,13]
]
selector=VarianceThreshold(1)
selector.fit(X)
print('Variances is %s'%selector.variances_)
print('After transform is \n%s'%selector.transform(X))
print('The surport is %s'%selector.get_support(True))
print('After reverse transform is \n%s'%selector.inverse_transform(selector.transform(X)))

单变量特征提取

SelectKBest

模型原型

class sklearn.feature_selection.SelectKBest(score_func=,k=10)
参数

  • score_func:给出统计指标
    • sklearn.feature_selection.f_regression:基于线性回归分析来计算统计指标。适用于回归问题
    • sklearn.feature_selection.chi2:计算卡方统计量,适用于分类问题
    • sklearn.feature_selection.f_classif:根据方差分析(ANOVA)的原理,以F-分布为依据,利用平方和与自由度所计算的祖居与组内均方估计出F值,适用于分类问题
  • k:指定要保留最佳的几个特征

属性

  • scores_
  • pvalues_:给出所有特征得分的p值

方法

  • fit(X,[,y]):从样本数据中学习统计指标得分
  • transform(X):执行特征选择
  • fit_transform(X[,y])
  • get_support([indices])
    • True:返回被选出的特征的下标
    • False:返回一个布尔值组成的数组,该数组指示哪些特征被选中
    • inverse_transform(X):根据选出来的特征还原原始数据,但对于被删除的属性值全部用0代替

SelectPercentile

模型原型

class sklearn.feature_selection.SelectPercentile(score_func=,percentile=10)
参数

  • score_func:给出统计指标
    • sklearn.feature_selection.f_regression:基于线性回归分析来计算统计指标。适用于回归问题
    • sklearn.feature_selection.chi2:计算卡方统计量,适用于分类问题
    • sklearn.feature_selection.f_classif:根据方差分析(ANOVA)的原理,以F-分布为依据,利用平方和与自由度所计算的祖居与组内均方估计出F值,适用于分类问题
  • percentile:指定要保留最佳的百分之几的特征

属性

  • scores_
  • pvalues_:给出所有特征得分的p值

方法

  • fit(X,[,y]):从样本数据中学习统计指标得分
  • transform(X):执行特征选择
  • fit_transform(X[,y])
  • get_support([indices])
    • True:返回被选出的特征的下标
    • False:返回一个布尔值组成的数组,该数组指示哪些特征被选中
  • inverse_transform(X):根据选出来的特征还原原始数据,但对于被删除的属性值全部用0代替

示例

from sklearn.feature_selection import SelectKBest,f_classif
X=[
    [1,2,3,4,5],
    [5,4,3,2,1],
    [3,3,3,3,3],
    [1,1,1,1,1]
]
y=[0,1,0,1]
print('before transform:\n',X)
selector=SelectKBest(score_func=f_classif,k=3)
selector.fit(X,y)
print('scores_:\n',selector.scores_)
print('pvalues_:',selector.pvalues_)
print('selected index:',selector.get_support(True))
print('after transform:\n',selector.transform(X))

包裹式特征选取

RFE

模型原型

class sklearn.feature_selection.RFE(estimator,n_features_to_select=None,step=1,estimator_params=None,verbose=0)
参数

  • estimator:一个学习器(通常使用SVM和广义线性模型作为estimator)
  • n_features_to_select:指定要选出几个特征
  • step:指定每次迭代要剔除权重最小的几个特征
    • 大于等于1:指定每次迭代要剔除权重最小的特征的数量
    • 在0.0~1.0:指定每次迭代要剔除权重最小的特征的比例
  • estimator_params:一个字典,用于设定estimator的参数
  • verbose

属性

  • nfeatures:给出了被选出的特征的数量
  • support_:一个数组,给出了被选择特征的mask
  • ranking_:特征排名

方法

  • fit(X,y):训练RFE模型
  • transform(X):执行特征选择
  • fit_transform(X,y):从样本数据中学习RFE模型,然后执行特征选择
  • get_support([indices])
  • inverse_transform(X)
  • predict(X)/predict_log_proba(X)/predict_proba(X):将X进行特征选择之后,在使用内部的estimator来预测
  • score(X,y):将X进行特征选择之后,在使用内部的estimator来评分

示例

from sklearn.feature_selection import RFE
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
iris=load_iris()
X=iris.data
y=iris.target
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2)
selector.fit(X,y)
print('N_features %s'%selector.n_features_)
print('Support is %s'%selector.support_)
print('Ranking %s'%selector.ranking_)

特征提取对于预测性能的提升没有必然的联系

from sklearn.feature_selection import RFE
from sklearn.svm import LinearSVC
from sklearn import cross_validation
from sklearn.datasets import load_iris

#加载数据
iris=load_iris()
X,y=iris.data,iris.target

#特征提取
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2)
X_t=selector.fit_transform(X,y)

#切分测试集与验证集
X_train,X_test,y_train,y_test=cross_validation.train_test_split(X,y,test_size=0.25,random_state=0,stratify=y)
X_train_t,X_test_t,y_train_t,y_test_t=cross_validation.train_test_split(X_t,y,test_size=0.25,random_state=0,stratify=y)

#测试与验证
clf=LinearSVC()
clf_t=LinearSVC()
clf.fit(X_train,y_train)
clf_t.fit(X_train_t,y_train_t)
print('Original DataSet:test score=%s'%(clf.score(X_test,y_test)))
print('Selected DataSet:test score=%s'%(clf_t.score(X_test_t,y_test_t)))

RFECV

模型原型

class sklearn.feature_selection.RFECV(estimator,step=1,cv=None,scoring=None,estimator_params=None,verbose=0)
参数

  • estimator:一个学习器(通常使用SVM和广义线性模型作为estimator)
  • step:指定每次迭代要剔除权重最小的几个特征
    • 大于等于1:指定每次迭代要剔除权重最小的特征的数量
    • 在0.0~1.0:指定每次迭代要剔除权重最小的特征的比例
  • cv:决策力交叉验证策略
    • None:使用默认的3折交叉验证
    • 整数k:使用k折交叉验证
    • 交叉验证生成器:直接使用该对象
    • 可迭代对象:使用该可迭代对象迭代生成训练——测试集合
  • scoring
  • estimator_params:一个字典,用于设定estimator的参数
  • verbose

属性

  • n_features_:给出了被选出的特征的数量
  • support_:一个数组,给出了被选择特征的mask
  • ranking_:特征排名
  • grid_scores_

方法

  • fit(X,y):训练RFECV模型
  • transform(X):执行特征选择
  • fit_transform(X,y):从样本数据中学习RFE模型,然后执行特征选择
  • get_support([indices])
  • inverse_transform(X)
  • predict(X)/predict_log_proba(X)/predict_proba(X):将X进行特征选择之后,在使用内部的estimator来预测
  • score(X,y):将X进行特征选择之后,在使用内部的estimator来评分

示例

import numpy as np
from sklearn.feature_selection import RFECV
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris

iris=load_iris()
X=iris.data
y=iris.target
estimator=LinearSVC()
selector=RFECV(estimator=estimator,cv=3)
selector.fit(X,y)
print('N_features %s'%selector.n_features_)
print('Support is %s'%selector.support_)
print('Ranking %s'%selector.ranking_)
print('Grid Scores %s'%selector.grid_scores_)

嵌入式特征选取

模型原型

class sklearn.feature_selection.SelectFromModel(estimator,threshold=None,prefit=False)
参数

  • estimator:一个学习器
  • threshold:指定特征重要性的一个阙值
    • 浮点数:指定阙值的绝对大小
    • 字符串
      • ’mean’
      • ‘median’
      • ‘n*mean’:表示阙值为n倍的特征重要性的均值
    • None
      • 阙值默认为’mean’
      • 如果estimator有一个penalty参数,且该参数设置为’l1’,则阙值默认为1e-5
  • prefit

属性

  • threshold_:存储了用于特征选取重要性的阙值

方法

  • fit(X,y)
  • transform(X):执行特征选择
  • fit_transform(X,y):从样本数据中学习RFE模型,然后执行特征选择
  • get_support([indices])
  • inverse_transform(X)
  • partial_fit(X,[,y]):只训练SelectFromModel模型一次

示例

import numpy as np
from sklearn.feature_selection import SelectFromModel
from sklearn.svm import LinearSVC
from sklearn.datasets import load_digits
digits=load_digits()
X=digits.data
y=digits.target
estimator=LinearSVC(penalty='l1',dual=False)
selector=SelectFromModel(estimator=estimator,threshold='mean')
selector.fit(X,y)
selector.transform(X)
print('Threshold %s'%selector.threshold_)
print('Support is \n%s'%selector.get_support(indices=True))

α和C参数与稀疏性的关系

import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVC
from sklearn.datasets import load_digits,load_diabetes
from sklearn.linear_model import Lasso

def test_Lasso(*data):
    X,y=data
    alphas=np.logspace(-2,2)
    zeros=[]
    for alpha in alphas:
        regr=Lasso(alpha=alpha)
        regr.fit(X,y)
        #计算零的个数
        num=0
        for ele in regr.coef_:
            if abs(ele)<1e-5:num+=1
        zeros.append(num)
    #绘图
    fig=plt.figure()
    ax=fig.add_subplot(1,1,1)
    ax.plot(alphas,zeros)
    ax.set_xlabel(r'$\alpha$')
    ax.set_ylabel('zeros in coef')
    ax.set_xscale('log')
    ax.set_ylim(0,X.shape[1]+1)
    ax.set_title('Sparsity In Lasso')
    plt.show()

def test_LinearSVC(*data):
    X,y=data
    Cs=np.logspace(-2,2)
    zeros=[]
    for C in Cs:
        clf=LinearSVC(C=C,penalty='l1',dual=False)
        clf.fit(X,y)
        #计算零的个数
        num=0
        for row in clf.coef_:
            for ele in row:
                if abs(ele)<1e-5:num+=1
        zeros.append(num)
    #绘图
    fig=plt.figure()
    ax=fig.add_subplot(1,1,1)
    ax.plot(Cs,zeros)
    ax.set_xlabel('C')
    ax.set_ylabel('zeros in coef')
    ax.set_xscale('log')
    ax.set_title('Sparsity In SVM')
    plt.show()

if __name__=='__main__':
    data=load_diabetes()
    test_Lasso(data.data,data.target)
    data=load_digits()
    test_LinearSVC(data.data,data.target)

学习器流水线(Pipeline)

模型原型

class sklearn.pipeline.Pipeline(steps)
参数

  • steps:列表的元素为(name,transform)元组,其中name是学习器的名字,用于输出和日志;transform是学习器,必须提供transform方法

属性

  • named_steps

方法

  • fit(X[,y]):启动流水线
  • transform(X):启动流水线
  • fit_transform(X[,y])
  • get_support([indices])
  • inverse_transform(X)
  • predict(X)/predict_log_proba(X)/predict_proba(X):将X进行特征选择之后,在使用内部的estimator来预测
  • score(X,y):将X进行特征选择之后,在使用内部的estimator来评分

示例(代码有问题,待处理)

from sklearn.svm import LinearSVC
from sklearn.datasets import load_digits
from sklearn import cross_validation
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

def test_Pipeline(data):
    X_train,X_test,y_train,y_test=data
    steps= [('Linear_SVM',LinearSVC(C=1.0,penalty='l1',dual=False)), ('LogisticRegression',LogisticRegression(C=1))]
    pipeline=Pipeline(steps)
    pipeline.fit(X_train,y_train)
    print('Named steps:',pipeline.named_steps)
    print('Pipeline Score:',pipeline.score(X_test,y_test))

if __name__=='__main__':
    data=load_digits()
    X=data.data
    y=data.target
    test_Pipeline(cross_validation.train_test_split(X,y,test_size=0.25,random_state=0,stratify=y))

字典学习

DictionaryLearning

模型原型

class sklearn.decomposition.DictionsryLearning(n_components=None,alpha=1,max_iter=1000,tol=1e-08,fit_algorithm=’lars’,transform_algorithm=’omp’,transform_n_nonzero_coefs=None,transform_alpha=None,n_jobs=1,code_init=None,dict_init=None,verbose=False,split_sign=False,random_state=None)
参数

  • n_components:指定字典大小k
  • alpha:指定L1L1,正则化项的系数λ,它控制了稀疏性
  • max_iter
  • tol
  • fit_algorithm:指定求解算法
    • ’lars’:least angle regression算法
    • ‘cd’:coordinate descent算法
  • transform_algorithm:指定数据转换方法
    • ’lasso_lars’:Lars算法
    • ‘lasso_cd’:coordinate descent算法
    • ‘lars’:least angle regression算法
    • ‘omp’:正交匹配方法
    • ‘threshold’:通过字典转换后的坐标中,小于transform_alpha的属性都设成0
  • transform_n_nonzero_coefs:指定每一列中非零元素的个数。只用于lars算法和omp算法
  • transform_alpha
    • 如果算法为lasso_lars或者lasso_cd,则该参数指定了L1正则化项的系数
    • 如果算法为threshold,则该参数指定了属性为0的阙值
    • 如果算法为omp,则该参数指定了重构误差的阙值
  • n_jobs
  • code_init:指定初始编码
  • dict_init:指定初始字典
  • verbose
  • split_sign:是否拆分系数特征向量为其正向值和负向值的拼接
  • random_state

属性

  • components_:存放学到的字典
  • error_:存放每一轮迭代的误差
  • n_iter:存放迭代的次数

方法

  • fit(X,y)
  • transform(X)
  • fit_transform(

X,y)
示例

from sklearn.decomposition import DictionaryLearning
X=[
    [1,2,3,4,5],
    [6,7,8,9,10],
    [10,9,8,7,6],
    [5,4,3,2,1]
]
print('before transform:',X)
dct=DictionaryLearning(n_components=3)
dct.fit(X)
print('components is:\n',dct.components_)
print('after transform:\n',dct.transform(X))

MiniBatchDictionaryLearning

模型原型

class sklearn.decomposition.MiniBatchDictionaryLearning(n_components=None,alpha=1,n_iter=1000,fit_algorithm=’lars’, n_jobs=1,batch_size=3,shuffle=True,dict_init=None,transform_algorithm=’omp’,transform_n_nonzero_coefs=None, transform_alpha=None,verbose=False,split_sign=False,random_state=None)
参数

  • n_components:指定字典大小k
  • alpha:指定L1L1,正则化项的系数λ,它控制了稀疏性
  • n_iter
  • fit_algorithm:指定求解算法
    • ’lars’:least angle regression算法
    • ‘cd’:coordinate descent算法
  • n_jobs
  • batch_size:每次训练时的样本数量
  • shuffle:训练样本之前是否进行混洗
  • dict_init:初始字典
  • transform_algorithm:指定数据转换方法
    • ’lasso_lars’:Lars算法
    • ‘lasso_cd’:coordinate descent算法
    • ‘lars’:least angle regression算法
    • ‘omp’:正交匹配方法
    • ‘threshold’:通过字典转换后的坐标中,小于transform_alpha的属性都设成0
  • transform_n_nonzero_coefs:指定每一列中非零元素的个数。只用于lars算法和omp算法
  • transform_alpha
    • 如果算法为lasso_lars或者lasso_cd,则该参数指定了L1正则化项的系数
    • 如果算法为threshold,则该参数指定了属性为0的阙值
    • 如果算法为omp,则该参数指定了重构误差的阙值
  • verbose
  • split_sign:是否拆分系数特征向量为其正向值和负向值的拼接
  • random_state

属性

  • components_:存放学到的字典
  • innerstats:存放算法的中间状态
  • n_iter:存放迭代的次数

方法

  • fit(X,y)
  • transform(X)
  • fit_transform(X,y)
  • partial_fit(X[,y,iter_offset]):只训练一个批次的样本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值