python之sklearn.docx

上传人:b****4 文档编号:1065806 上传时间:2022-10-16 格式:DOCX 页数:14 大小:22.19KB
下载 相关 举报
python之sklearn.docx_第1页
第1页 / 共14页
python之sklearn.docx_第2页
第2页 / 共14页
python之sklearn.docx_第3页
第3页 / 共14页
python之sklearn.docx_第4页
第4页 / 共14页
python之sklearn.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

python之sklearn.docx

《python之sklearn.docx》由会员分享,可在线阅读,更多相关《python之sklearn.docx(14页珍藏版)》请在冰豆网上搜索。

python之sklearn.docx

python之sklearn

python之sklearn

ScikitLearn:

在python中机器学习

 

Warning

警告:

有些没能理解的句子,我以自己的理解意译。

 

翻译自:

ScikitLearn:

MachineLearninginPython

作者:

FabianPedregosa,GaelVaroquaux

先决条件

Numpy,ScipyIPythonmatplotlibscikit—learn

目录载入示例数据

一个改变数据集大小的示例:

数码数据集(digits

datasets)学习和预测

分类

K最近邻(KNN)分类器

训练集和测试集

分类支持向量机(SVMs)

线性支持向量机使用核

聚类:

将观测值聚合

k均值聚类

应用到图像压缩

用主成分分析降维将一切放在一起:

人脸识别线性模型:

从回归到稀疏

稀疏模型

同一问题的不同算法

模型选择:

选择估计器和它们的参数

格点搜索和交叉验证估计器

格点搜索交叉验证估计器

Footnotes警告:

在0。

9版中(2011年9月发行),scikit-learn的导入路径从scikits。

learn更改为sklearn载入示例数据

首先我们载入一些用来玩耍的数据。

我们将使用的数据是非常简单的著名的花朵数据--安德森鸢尾花卉数据集。

我们有一百五十个鸢尾花的一些尺寸的观测值:

萼片长度、宽度,花瓣长度和宽度.还有它们的亚属:

山鸢尾(Irissetosa)、变色鸢尾(Irisversicolor)和维吉尼亚鸢尾(Irisvirginica)

向Python对象载入数据:

In[1]:

fromsklearnimportdatasets

In[2]:

iris=datasets.load_iris()

数据存储在。

data项中,是一个(n_samples,n_features)数组。

In[3]:

iris.data.shape

Out[3]:

(150,4)

每个观察对象的种类存贮在数据集的。

target属性中.这是一个长度为n_samples的整数一维数组:

In[5]:

iris.target.shape

Out[5]:

(150,)

In[6]:

importnumpyasnp

In[7]:

np。

unique(iris。

target)

Out[7]:

array([0,1,2])

 

一个改变数据集大小的示例:

数码数据集(digitsdatasets)

数码数据集1包括1797个图像,每一个都是个代表手写数字的8x8像素图像

In[8]:

digits=datasets。

load_digits()

In[9]:

digits。

images。

shape

Out[9]:

(1797,8,8)

In[10]:

importpylabaspl

In[11]:

pl.imshow(digits.images[0],cmap=pl。

cm.gray_r)

Out[11]:

<matplotlib。

image。

AxesImageat0x3285b90>

In[13]:

pl。

show()

为了在scikit中使用这个数据集,我们把每个8x8图像转换成长度为64的矢量。

(译者注:

或者直接用digits.data)

In[12]:

data=digits.images.reshape((digits。

images。

shape[0],—1))

 

学习和预测

现在我们已经获得一些数据,我们想要从中学习和预测一个新的数据。

在scikit—learn中,我们通过创建一个估计器(estimator)从已经存在的数据学习,并且调用它的fit(X,Y)方法.

In[14]:

fromsklearnimportsvm

In[15]:

clf=svm。

LinearSVC()

In[16]:

clf。

fit(iris.data,iris。

target)#learnfromthedata

Out[16]:

LinearSVC(C=1。

0,class_weight=None,dual=True,fit_intercept=True,

intercept_scaling=1,loss=’l2',multi_class='ovr’,penalty='l2',

tol=0.0001,verbose=0)

一旦我们已经从数据学习,我们可以使用我们的模型来预测未观测数据最可能的结果。

In[17]:

clf.predict([[5.0,3.6,1.3,0。

25]])

Out[17]:

array([0],dtype=int32)

注意:

我们可以通过它以下划线结束的属性存取模型的参数:

In[18]:

clf.coef_

Out[18]:

array([[0。

18424352,0.45122644,—0。

8079467,-0。

45071302],

[0.05190619,—0。

89423619,0.40519245,—0.93781587],

[-0。

85087844,-0。

98667529,1.38088883,1.86538111]])

 

分类

 

K最近邻(KNN)分类器

最简单的可能的分类器是最近邻:

给定一个新的观测值,将n维空间中最靠近它的训练样本标签给它.其中n是每个样本中特性(features)数。

k最近邻2分类器内部使用基于球树(ball

tree)3来代表它训练的样本.

KNN分类示例:

In[19]:

#Createandfitanearest—neighborclassifier

In[20]:

fromsklearnimportneighbors

In[21]:

knn=neighbors。

KNeighborsClassifier()

In[22]:

knn。

fit(iris.data,iris.target)

Out[22]:

KNeighborsClassifier(algorithm=’auto’,leaf_size=30,n_neighbors=5,p=2,

warn_on_equidistant=True,weights='uniform’)

In[23]:

knn.predict([[0.1,0.2,0。

3,0。

4]])

Out[23]:

array([0])

 

训练集和测试集

当验证学习算法时,不要用一个用来拟合估计器的数据来验证估计器的预测非常重要.确实,通过kNN估计器,我们将总是获得关于训练集完美的预测.

In[24]:

perm=np.random。

permutation(iris.target。

size)

In[25]:

iris。

data=iris。

data[perm]

In[26]:

iris.target=iris。

target[perm]

In[27]:

knn.fit(iris。

data[:

100],iris。

target[:

100])

Out[27]:

KNeighborsClassifier(algorithm=’auto',leaf_size=30,n_neighbors=5,p=2,

warn_on_equidistant=True,weights='uniform')

In[28]:

knn。

score(iris。

data[100:

],iris。

target[100:

])

/usr/lib/python2.7/site-packages/sklearn/neighbors/classification.py:

129:

NeighborsWarning:

kneighbors:

neighbork+1andneighborkhavethesamedistance:

resultswillbedependentondataorder.

neigh_dist,neigh_ind=self。

kneighbors(X)

Out[28]:

0.95999999999999996

Bonus的问题:

为什么我们使用随机的排列?

 

分类支持向量机(SVMs)

 

线性支持向量机

SVMs4尝试构建一个两个类别的最大间隔超平面。

它选择输入的子集,调用支持向量即离分离的超平面最近的样本点。

In[60]:

fromsklearnimportsvm

In[61]:

svc=svm.SVC(kernel='linear’)

In[62]:

svc。

fit(iris。

data,iris。

target)

Out[62]:

SVC(C=1.0,cache_size=200,class_weight=None,coef0=0.0,degree=3,gamma=0.0,

kernel=’linear',probability=False,shrinking=True,tol=0.001,

verbose=False)

scikit-learn中有好几种支持向量机实现。

最普遍使用的是svm。

SVC,svm。

NuSVC和svm.LinearSVC;“SVC"代表支持向量分类器(SupportVectorClassifier)(也存在回归SVMs,在scikit-learn中叫作“SVR").

练习

训练一个数字数据集的svm.SVC.省略最后10%并且检验观测值的预测表现。

 

使用核

类别不总是可以用超平面分离,所以人们指望有些可能是多项式或指数实例的非线性决策函数:

线性核

svc=svm。

SVC(kernel=’linear’)

 

多项式核

svc=svm。

SVC(kernel=’poly’,…degree=3)#degree:

polynomialdegree

 

RBF核(径向基函数)5

svc=svm.SVC(kernel='rbf')#gamma:

inverseofsizeof#radialkernel

 

练习

以上提到的哪些核对数字数据集有更好的预测性能?

(译者:

前两个)

 

聚类:

将观测值聚合

给定鸢尾花数据集,如果我们知道这有三种鸢尾花,但是无法得到它们的标签,我们可以尝试非监督学习:

我们可以通过某些标准聚类观测值到几个组别里.

 

k均值聚类

最简答的聚类算法是k均值算法.这将一个数据分成k个集群,以最小化观测值(n维空间中)到聚类中心的均值来分配每个观测点到集群;然后均值重新被计算。

这个操作递归运行直到聚类收敛,在max_iter回合内到最大值。

6

(一个替代的k均值算法实现在scipy中的cluster包中。

这个scikit-learn实现与之不同,通过提供对象API和几个额外的特性,包括智能初始化。

In[82]:

fromsklearnimportcluster,datasets

In[83]:

iris=datasets.load_iris()

In[84]:

k_means=cluster.KMeans(k=3)

In[85]:

k_means.fit(iris。

data)

Out[85]:

KMeans(copy_x=True,init=’k—means++',k=3,max_iter=300,n_init=10,n_jobs=1,

precompute_distances=Tr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1