python︱sklearn一些小技巧的记录(pipeline...)
来源:互联网 发布:淘宝生产许可证怎么办 编辑:程序博客网 时间:2024/05/16 16:17
sklearn里面包含内容太多,所以一些实用小技巧还是挺好用的。
1、LabelEncoder
简单来说 LabelEncoder 是对不连续的数字或者文本进行编号
from sklearn.preprocessing import LabelEncoderle = LabelEncoder()le.fit([1,5,67,100])le.transform([1,1,100,67,5])
输出: array([0,0,3,2,1])
2、OneHotEncoder
OneHotEncoder 用于将表示分类的数据扩维:
from sklearn.preprocessing import OneHotEncoderohe = OneHotEncoder()ohe.fit([[1],[2],[3],[4]])ohe.transform([2],[3],[1],[4]).toarray()
输出:[ [0,1,0,0] , [0,0,1,0] , [1,0,0,0] ,[0,0,0,1] ]
正如keras中的keras.utils.to_categorical(y_train, num_classes)
.
3、sklearn.model_selection.train_test_split随机划分训练集和测试集
一般形式:
train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train data和testdata,形式为:
X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)
参数解释:
- train_data:所要划分的样本特征集
- train_target:所要划分的样本结果
- test_size:样本占比,如果是整数的话就是样本的数量
- random_state:是随机数的种子。
- 随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
- 种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。
fromsklearn.cross_validation import train_test_split train= loan_data.iloc[0: 55596, :] test= loan_data.iloc[55596:, :] # 避免过拟合,采用交叉验证,验证集占训练集20%,固定随机种子(random_state) train_X,test_X, train_y, test_y = train_test_split(train, target, test_size = 0.2, random_state = 0) train_y= train_y['label'] test_y= test_y['label']
.
4、pipeline
本节参考与文章:用 Pipeline 将训练集参数重复应用到测试集
pipeline 实现了对全部步骤的流式化封装和管理,可以很方便地使参数集在新数据集上被重复使用。
pipeline 可以用于下面几处:
- 模块化 Feature Transform,只需写很少的代码就能将新的 Feature 更新到训练集中。
- 自动化 Grid Search,只要预先设定好使用的 Model 和参数的候选,就能自动搜索并记录最佳的 Model。
- 自动化 Ensemble Generation,每隔一段时间将现有最好的 K 个 Model 拿来做 Ensemble。
问题是要对数据集 Breast Cancer Wisconsin 进行分类,
它包含 569 个样本,第一列 ID,第二列类别(M=恶性肿瘤,B=良性肿瘤),
第 3-32 列是实数值的特征。
from pandas as pdfrom sklearn.cross_validation import train_test_splitfrom sklearn.preprocessing import LabelEncoderdf = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/' 'breast-cancer-wisconsin/wdbc.data', header=None) # Breast Cancer Wisconsin datasetX, y = df.values[:, 2:], df.values[:, 1]encoder = LabelEncoder()y = encoder.fit_transform(y) >>> encoder.transform(['M', 'B']) array([1, 0])X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=0)
我们要用 Pipeline 对训练集和测试集进行如下操作:
- 先用 StandardScaler 对数据集每一列做标准化处理,(是 transformer)
- 再用 PCA 将原始的 30 维度特征压缩的 2 维度,(是 transformer)
- 最后再用模型 LogisticRegression。(是 Estimator)
- 调用 Pipeline 时,输入由元组构成的列表,每个元组第一个值为变量名,元组第二个元素是 sklearn 中的 transformer
或 Estimator。
注意中间每一步是 transformer,即它们必须包含 fit 和 transform 方法,或者 fit_transform。
最后一步是一个 Estimator,即最后一步模型要有 fit 方法,可以没有 transform 方法。
然后用 Pipeline.fit对训练集进行训练,pipe_lr.fit(X_train, y_train)
再直接用 Pipeline.score 对测试集进行预测并评分 pipe_lr.score(X_test, y_test)
from sklearn.preprocessing import StandardScalerfrom sklearn.decomposition import PCAfrom sklearn.linear_model import LogisticRegressionfrom sklearn.pipeline import Pipelinepipe_lr = Pipeline([('sc', StandardScaler()), ('pca', PCA(n_components=2)), ('clf', LogisticRegression(random_state=1)) ])pipe_lr.fit(X_train, y_train)print('Test accuracy: %.3f' % pipe_lr.score(X_test, y_test)) # Test accuracy: 0.947
还可以用来选择特征:
例如用 SelectKBest 选择特征,
分类器为 SVM,
anova_filter = SelectKBest(f_regression, k=5)clf = svm.SVC(kernel='linear')anova_svm = Pipeline([('anova', anova_filter), ('svc', clf)])
当然也可以应用 K-fold cross validation:
model = Pipeline(estimators)seed = 7kfold = KFold(n_splits=10, random_state=seed)results = cross_val_score(model, X, Y, cv=kfold)print(results.mean())
Pipeline 的工作方式:
当管道 Pipeline 执行 fit 方法时,
首先 StandardScaler 执行 fit 和 transform 方法,
然后将转换后的数据输入给 PCA,
PCA 同样执行 fit 和 transform 方法,
再将数据输入给 LogisticRegression,进行训练。
参考:
python 数据处理中的 LabelEncoder 和 OneHotEncoder
sklearn 中的 Pipeline 机制
用 Pipeline 将训练集参数重复应用到测试集
- python︱sklearn一些小技巧的记录(pipeline...)
- sklearn的一些技巧总结
- 记录一些小技巧
- 记录一些小技巧
- sklearn.pipeline.Pipeline类的用法
- sklearn.pipeline.Pipeline类的用法
- Python的一些小技巧小知识
- Python的一些小技巧小知识
- Python的一些小技巧小知识
- sklearn 流水线(pipeline)使用
- Python 里面的一些小技巧(持续更新)
- python学习的一些小技巧小结
- 关于Python的一些使用小技巧
- Python爬虫的一些小技巧
- sklearn pipeline
- Python sklearn包中的一些小函数笔记
- Html记录一些有用的小技巧持续更新.....
- Python中一些小技巧
- .jar文件打开方式没有Java(TM) Platform SE binary怎么办?
- 面试
- 深入java虚拟机
- 求和最接近整个序列和的一半的子序列,是个标准的子序列问题,不过不知道O(N^2)是不是最优的
- c#文件操作类
- python︱sklearn一些小技巧的记录(pipeline...)
- PAT A1096.Consecutive Factors
- 移植Qt
- mysql 基本操作
- jdk并发工具包之锁
- 01 html的学习笔记
- C++数独求解程序(阿里巴巴社招笔试题)对比:包括新加坡总理李显龙的程序
- English words page nine
- 一个js函数的改进(实现动画效果)