C/C++气象数据中心实战,手把手教你做工业级项目
发布于 23 天前 作者 bianchengyuan51 114 次浏览 来自 前端进阶

download:C/C++气象数据中心实战,手把手教你做工业级项目

模块化特征转换 步骤阐明:

步骤一:先用 StandardScaler 对数据集每一列做规范化处置(transformer), 步骤二:再用 PCA 主成分剖析停止特征降维(transformer), 步骤三:最后再用 SVC 模型分类(Estimator)。 锻炼得到的是一个模型,可经过pipe.predict(X)直接用来预测,预测时,数据会从步骤一开端停止转换,防止了模型用来预测的数据还要额外写代码完成。还可经过pipe.score(X,Y)得到这个模型在X锻炼集上的正确率。

from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.decomposition import PCA from sklearn.datasets import load_iris iris=load_iris() pipe=Pipeline([(‘sc’, StandardScaler()),(‘pca’,PCA()),(‘svc’,SVC())])

(‘sc’, StandardScaler()) sc为自定义转换器称号, StandardScaler()为执行规范化任务的转换器

pipe.fit(iris.data, iris.target)

预测

print(pipe.predict(iris.data))

评价模型的分数(精确率)

print(pipe.score(iris.data, iris.target)) 复制代码 运转结果:

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] 0.9733333333333334 复制代码 除此之外,我们还能够运用make_pipeline函数,它是Pipeline类的简单完成,只需传入每个step的类实例即可,不需本人命名,它自动将类的小写设为该step的名。

from sklearn.pipeline import make_pipeline from sklearn.naive_bayes import GaussianNB make_pipeline(StandardScaler(),GaussianNB()) 复制代码 运转结果:

Pipeline(steps=[(‘standardscaler’, StandardScaler()), (‘gaussiannb’, GaussianNB())]) 复制代码 自动化网格搜索(Grid Search) Pipeline还能够分离GridSearch来对参数停止选择。

步骤阐明:

步骤一:首先,运用TfidfVectorizer停止特征抽取。 步骤二:然后,运用 SVC 模型分类。 步骤三:最后,经过GridSearchCV运用穿插考证停止网格搜索。 from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.svm import SVC from sklearn.pipeline import Pipeline from sklearn.model_selection import GridSearchCV import numpy as np

下载数据

news = fetch_20newsgroups(subset=‘all’)

切分数据集

X_train,X_test,y_train,y_test = train_test_split(news.data[:3000],news.target[:3000],test_size=0.25,random_state=33)

文本特征抽取

vec = TfidfVectorizer() X_count_train = vec.fit_transform(X_train) X_count_test = vec.transform(X_test)

运用pipeline简化系统搭建流程,将文本抽取与分类器模型串联起来

clf = Pipeline([(‘vect’,TfidfVectorizer(stop_words=‘english’)),(‘svc’,SVC())])

这里经pipeline停止特征处置、SVC模型锻炼之后,得到的直接就是锻炼好的分类器clf

parameters = { ‘svc__gamma’: np.logspace(-2,1,4), ‘svc__C’: np.logspace(-1,1,3), ‘vect__analyzer’: [‘word’] }

GridSearchCV运用穿插考证停止网格搜索,其中,n_jobs=-1代表运用计算机的全部CPU

gs = GridSearchCV(clf, parameters, verbose=2, refit=True, cv=3, n_jobs=-1) gs.fit(X_train,y_train)

经过穿插考证获取最好的超参数和模型评价最好的分数

print (gs.best_params_, ‘—’,gs.best_score_)

评价最好的模型的分数(精确率)

print (gs.score(X_test, y_test)) 复制代码 运转结果:

Fitting 3 folds for each of 12 candidates, totalling 36 fits {‘svc__C’: 10.0, ‘svc__gamma’: 0.1, ‘vect__analyzer’: ‘word’} — 0.7888888888888889 0.8226666666666667 复制代码 能够看到,parameters变量里面的key都有一个前缀,不难发现,这个前缀其实就是在Pipeline中定义的操作名。二者相分离,使我们的代码变得非常简约。

关于网格搜索(Grid Search)的阐明:

网格搜索是一种调优办法,在参数列表中停止穷举搜索,对每种状况停止锻炼,找到最优的参数;由此可知,这种办法的主要缺陷是比拟耗时,参数越多,候选值越多,消耗时间越长!所以,普通状况下,先定一个大范围,然后再细化。

特征组合 FeatureUnion 将多个转换器(transformer)组合成一个新的转换器(transformer)对象,在拟合过程中,每个转换器都独立地拟合数据,并行停止,并且输出的特征矩阵被并排排列在一个大的矩阵中。

一个FeatureUnion对象承受一个transformer对象列表。FeatureUnion 能和 Pipeline 组合运用。

留意:

FeatureUnion无法检查两个transformers能否产生了相同的特征输出,它仅仅产生了一个原来相互别离的特征向量的汇合。确保其产生不一样的特征输出是调用者的事情。

步骤阐明:

步骤一:分别经过StandardScaler和FunctionTransformer停止特征处置。 步骤二:然后将StandardScaler处置后的特征与FunctionTransformer处置后的特征停止组合。 from sklearn.pipeline import FeatureUnion from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import FunctionTransformer from numpy import log1p

原始矩阵数据外形

print(iris.data.shape) step1=(‘Standar’, StandardScaler()) step2=(‘ToLog’, FunctionTransformer(log1p)) steps=FeatureUnion(transformer_list=[step1,step2]) print(steps) data=steps.fit_transform(iris.data)

经过特征组合之后的矩阵数据外形

print(data.shape)

查看第一行数据

print(data[0]) 复制代码 运转结果:

(150, 4) FeatureUnion(transformer_list=[(‘Standar’, StandardScaler()), (‘ToLog’, FunctionTransformer(func=<ufunc ‘log1p’>))]) (150, 8) [-0.90068117 1.01900435 -1.34022653 -1.3154443 1.80828877 1.5040774 0.87546874 0.18232156]

回到顶部