,,Python之Sklearn使用入门教程

,,Python之Sklearn使用入门教程

本文主要介绍了Python中Sklearn的入门教程,通过示例代码介绍的非常详细,对于大家的学习或者工作都有一定的参考价值。有需要的朋友下面和边肖一起学习。

1.Sklearn简介

Sci-learn (sklearn)是机器学习中常用的第三方模块,封装了常用的机器学习方法,包括回归、降维、分类、聚类等。当面对机器学习的问题时,我们可以根据下图选择相应的方法。Sklearn有以下特点:

简单高效的数据挖掘和数据分析工具

让每个人都能够在复杂的环境中重用它。

在NumPy,Scipy,MatPlotLib上创建

2.Sklearn安装

Sklearn安装需要Python(=2.7 or=3.3)、NumPy (=1.8.2)、SciPy (=0.13.3)。你可以使用pip install-u scikit-learn来安装scikit-learn如果NumPy和SciPy已经安装。

3.Sklearn通用学习模式

Sklearn包含了很多机器学习方法,但是所有的学习方法都大致相同。这里介绍一下Sklearn的一般学习模式。首先介绍要训练的数据。Sklearn自带一些数据集,也可以通过相应的方法来构造。4.我们将介绍如何在4中构造数据。Sklearn数据集。然后选择相应的机器学习方法进行训练。在训练过程中,可以通过一些技巧来调整参数,使得学习精度更高。模型训练完成后,可以预测新的数据,然后我们可以通过MatPlotLib等方法直观的显示数据。另外可以保存我们训练好的模型,方便迁移到其他平台,不需要重新训练。

从sklearn导入datasets#引入数据集,sklearn包含很多数据集。

从sklearn.model _ selection导入train _ test _ split #将数据分为测试集和训练集。

来自sklearn。邻居通过邻近点导入kneighborsclassifier #训练数据

# # #介绍数据# # #

Iris=datasets.load_iris()# iris虹膜数据介绍,它包含四个特征变量。

Iris_X=iris.data#特征变量

Iris_y=iris.target#目标值

X _ train,x _ test,y _ train,y _ test=train_test_split (iris _ x,iris _ y,test_size=0.3)# Train _ test _ split用于将训练集从测试集中分离出来,test _ size占30%。

Print(y_train)#我们看到训练数据的特征值分为3类

'''

[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 1 1 1 1 1 1 1 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 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

2 2]

'''

# # #训练数据# # #

KN=kneighborsclassifier()#介绍训练方法

Knn.fit(X_train,y_train)#填写测试数据进行训练。

# # #预测数据# # #

Print(knn.predict(X_test))#预测特征值

'''

[1 1 1 0 2 2 1 1 1 0 0 0 2 2 0 1 2 2 0 1 0 0 0 0 0 0 2 1 0 0 0 1 0 2 0 2 0

1 2 1 0 0 1 0 2]

'''

Print(y_test)#真特征值

'''

[1 1 1 0 1 2 1 1 1 0 0 0 2 2 0 1 2 2 0 1 0 0 0 0 0 0 2 1 0 0 0 1 0 2 0 2 0

1 2 1 0 0 1 0 2]

'''

4.Sklearn datasets

Sklearn提供了一些标准数据,我们就不用再去找其他网站的数据进行训练了。比如我们用来训练的load_iris数据,可以很容易的返回数据特征变量和目标值。除了引入数据,还可以通过load_sample_images()引入图片。

除了sklearn提供的一些数据,我们也可以自己构造一些数据来帮助我们学习。

从sklearn导入数据集#导入数据集

#施工的各种参数可以根据自己的需要进行调整。

x,y=datasets . make _ regression(n _ samples=100,n_features=1,n_targets=1,noise=1)

# # #绘制构造的数据# # #

将matplotlib.pyplot作为plt导入

图表()

平面散点图(X,y)

plt.show()

5.Sklearn Model的属性和功能

数据训练完成后,得到模型。我们可以根据不同的模型得到相应的属性和函数,输出得到直观的结果。如果线性回归训练后得到线性函数y=0.3x 1,我们可以得到模型的系数为0.3 through _coef,模型的截距为1 through _intercept。

从sklearn导入数据集

Fromsklearn.linear _ model导入线性回归#引入线性回归模型

# # #介绍数据# # #

load_data=datasets.load_boston()

数据X=加载数据

数据y=加载数据目标

打印(data_X.shape)

#(506,13)data_X有13个特征变量。

# # #训练数据# # #

模型=线性回归()

model.fit(数据X,数据y)

Model.predict(data_X[:4,)#预测前4个数据

# # #属性和功能# # #

打印(model.coef_)

'''

2.08602395e-02 2.68856140e 00

-1.77957587 e 01 3.80475246 e 00 7.51061703 e-04-1.47575880 e 00

3.05655038 e-01-1.23293463 e-02-9.53463555 e-01 9.39251272 e-03

-5.25466633e-01]

'''

print(model.intercept_)

#36.4911032804

Print(model.get_params())#获取模型的参数

#{'copy_X': True,' normalize': False,' n_jobs': 1,' fit_intercept': True}

Print (model.score (data _ x,data _ y)) #对训练进行评分。

#0.740607742865

6.Sklearn数据预处理

数据集的标准化是大多数机器学习算法的例行要求。如果单个特征或多或少不接近标准的正态分布,它可能在项目中表现不好。在实际情况中,我们往往忽略特征的分布形状,直接去掉均值来居中一个特征,然后除以非恒定特征的标准差来进行缩放。

例如,在很多学习算法中,目标函数是建立在假设所有特征都是零均值且具有同阶方差(如径向基函数、支持向量机和L1L2正则项等)的基础上的。).如果一个特征的方差比其他特征的方差大几个数量级,那么它就会在学习算法中占据主导地位,导致学习者无法像预期的那样从其他特征中学习。比如我们可以通过尺度把数据尺度化,实现标准化。

从sklearn导入预处理

将numpy作为np导入

a=np.array([[10,2.7,3.6),

[-100,5,-2],

[120,20,40]],dtype=np.float64)

打印(一份)

Print(preprocessing.scale(a))#减少值的差异。

'''

[[ 10.2.7 3.6]

[-100.5.-2.]

[ 120.20.40

[[ 0.-0.85170713 -0.55138018]

[-1.22474487 -0.55187146 -0.852133 ]

[ 1.22474487 1.40357859 1.40351318]]

'''

我们来看看预处理前后的区别。预处理前的模型得分为0.51111111111,预处理后的模型得分为0.933333333。可以看出,预处理大大提高了模型得分。

从sklearn.model_selection导入训练_测试_拆分

从sk learn . datasets . samples _ generator导入make_classification

从sklearn.svm导入SVC

将matplotlib.pyplot作为plt导入

# # #生成的数据如下图所示# # #

平面图

x,y=make _ classification(n _ samples=300,n_features=2,n_redundant=0,n _ informative=2,random_state=22,n_clusters_per_class=1,scale=100)

plt.scatter(X[:0],X[:1],c=y)

plt.show()

# # #用最小最大值法标准化数据# # #

x=preprocessing . minmax _ scale(x)# feature _ range=(-1,1)设置重置范围。

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)

clf=SVC()

clf.fit(X_train,y_train)

print(clf.score(X_test,y_test))

#0.933333333333

#归一化前,我们的训练分数是0.511111111111,归一化后是0.933333333,大大提高了准确率。

7.交叉验证

交叉验证的基本思想是将原始数据分组,一部分作为训练集训练模型,另一部分作为测试集评估模型。交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的性能,可以在一定程度上减少过拟合。也可以从有限的数据中获取尽可能多的有效信息。

在机器学习任务中,得到数据后,我们会先把原始数据集分成三部分:训练集、验证集和测试集。训练集用于训练模型,验证集用于模型的参数选择和配置,测试集是模型的未知数据,用于评估模型的泛化能力。不同的划分会导致不同的最终模型。

以前我们直接把数据分为70%的训练数据和测试数据。现在,我们使用K-fold交叉验证来拆分数据。首先,我们将数据分成五组,然后从五组中选择不同的数据进行训练。

从sklearn.datasets导入load_iris

从sklearn.model_selection导入训练_测试_拆分

从sklearn.neighbors导入KNeighborsClassifier

# # #介绍数据# # #

iris=load_iris()

X=iris.data

y=虹膜.目标

# # #训练数据# # #

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)

#引入交叉验证,将数据分为5组进行训练。

从sklearn.model_selection导入cross_val_score

KNEIGHBORSCLASSIFIER(n _ neighbors=5)#选择五个相邻的点。

Scores=cross _ val _ score (KNN,x,y,CV=5,计分='准确度')#计分方法是准确度

打印(分数)#每组的分数结果

# [0.9666667 1.0.933333 0.66667 1.] 5组数据

Print(scores.mean())#平均分数结果

#0.973333333333

那么n_neighbor=5是最好的吗?我们来调整参数,看看模型最终的训练分数。

从sklearn导入数据集

从sklearn.model_selection导入训练_测试_拆分

从sklearn.neighbors导入KNeighborsClassifier

Fromsklearn.model _ selection导入cross _ val _ score #引入交叉验证

将matplotlib.pyplot作为plt导入

# # #介绍数据# # #

iris=datasets.load_iris()

X=iris.data

y=虹膜.目标

# # #将n_neighbors的值设置为1到30,通过绘制# # #来查看训练分数

k_range=range(1,31)

k_score=[]

对于k_range中的k:

KNN=KNeighborsClassifier(n _ neighbors=k)

scores=cross_val_score(knn,X,y,cv=10,scoring=' accuracy ')#用于分类

k_score.append(scores.mean())

图表()

plt.plot(k_range,k_score)

PLT . xlabel(' KNN的k值')

plt.ylabel(“交叉验证准确性”)

plt.show()

过多的#K会带来拟合问题,我们可以在12到18之间选择一个值。

我们可以看到n_neighbor在12到18之间的分数很高,我们可以通过这种方式在实际项目中选择不同的参数。此外,我们还可以选择2重交叉验证、留一交叉验证等方法对数据进行分割,比较不同的方法和参数,得到最好的结果。

我们把上面代码的循环部分改一下,把评分函数改成neg_mean_squared_error,得到不同参数的损失函数。

对于k_range中的k:

KNN=KNeighborsClassifier(n _ neighbors=k)

loss=-cross_val_score(knn,X,y,cv=10,scoring=' neg _ mean _ squared _ error ')#用于回归

k_score.append(loss.mean())

8.过拟合问题

什么是过拟合问题?比如下图,黑线已经可以很好的对红点和蓝点进行分类,但是在机器学习的过程中,模型过于纠结于精度,导致了绿线的结果。然后在预测测试数据集结果的过程中,往往会浪费大量的时间,准确率也不是很好。

先举例说明如何识别overfitting问题。Sklearn.learning_curve中的学习曲线可以直观的看到模型学习的进度,比较有没有拟合。

从sklearn.model_selection导入学习曲线

从sklearn.datasets导入load_digits

从sklearn.svm导入SVC

将matplotlib.pyplot作为plt导入

将numpy作为np导入

#介绍数据

digits=load_digits()

x=数字.数据

y=数字。目标

#train_size表示记录学习过程中的某一步,如10%、25%.

训练大小,训练损失,测试损失=学习曲线(

SVC(gamma=0.1),X,y,cv=10,scoring=' neg _ mean _ squared _ error ',

train _ size=[0.1,0.25,0.5,0.75,1]

)

train _ loss _ mean=-NP . mean(train _ loss,axis=1)

test _ loss _ mean=-NP . mean(test _ loss,轴=1)

图表()

#打印出每个步骤。

plt.plot(train_size,train_loss_mean,' o-',color='r ',label='Training ')

plt.plot(train_size,test_loss_mean,' o-',color='g ',label='Cross-validation ')

plt.legend(“最佳”)

plt.show()

如果我们改变的值,我们将改变相应的损失函数。函数的损失停留在10左右,然后可以直观的看到过拟合。

让我们修改gamma参数来纠正过度拟合问题。

Fromsklearn.model _ selection导入验证曲线#将学习曲线更改为验证曲线

从sklearn.datasets导入load_digits

从sklearn.svm导入SVC

将matplotlib.pyplot作为plt导入

将numpy作为np导入

#介绍数据

digits=load_digits()

x=数字.数据

y=数字。目标

#更改参数以观察损失函数。

param_range=np.logspace(-6,-2.3,5)

train_loss,test _ loss=验证曲线(

SVC(),X,y,param_name='gamma ',param_range=param_range,cv=10,

得分='负均方误差'

)

train _ loss _ mean=-NP . mean(train _ loss,axis=1)

test _ loss _ mean=-NP . mean(test _ loss,轴=1)

图表()

plt.plot(param_range,train_loss_mean,' o-',color='r ',label='Training ')

plt.plot(param_range,test_loss_mean,' o-',color='g ',label='交叉验证')

plt.xlabel('gamma ')

plt.ylabel(“损失”)

plt.legend(loc='best ')

plt.show()

通过改变不同的伽马值,我们可以看到损失函数的变化。从图中可以看出,如果gamma的值大于0.001,就会出现过拟合的问题,所以我们在建立模型的时候gamma的参数设置应该小于0.001。

9.保存模型

我们要花很长时间来训练数据,调整参数,得到最优模型。但是如果换个平台,还是需要重新训练数据,修正参数才能得到模型,这样会很浪费时间。此时,我们可以先保存模型,然后我们可以轻松地迁移模型。

从sklearn导入svm

从sklearn导入数据集

#介绍和培训数据

iris=datasets.load_iris()

x,y=虹膜.数据,虹膜.目标

clf=svm。SVC()

clf.fit(X,y)

#介绍sklearn附带的保存模块

从sklearn.externals导入作业库

#保存模型

joblib.dump(clf,' sklearn_save/clf.pkl ')

#重新加载模型,只能在保存一次后加载模型

cl F3=joblib . load(' sk learn _ save/clf . pkl ')

print(clf3.predict(X[0:1])

#存储模型可以更快地得到以前的结果。

参考链接

本文编译自莫凡sklearn视频教程,链接https://morvanzhou . github . io/tutorials/machine-learning/sk learn/。

关于Python中Sklearn入门教程的这篇文章到此为止。更多相关Sklearn介绍内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: