加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数据处理的统计学习(scikit-learn教程)

发布时间:2020-12-26 01:40:33 所属栏目:大数据 来源:网络整理
导读:数据挖掘入门与实战 ?公众号: datadw Scikit-learn 是一个紧密结合Python科学计算库(Numpy、Scipy、matplotlib),集成经典机器学习算法的Python模块。 一、统计学习:scikit-learn中的设置与评估函数对象 (1)数据集 scikit-learn 从二维数组描述的数据中

练习:
尝试使用近邻算法和线性模型对数字数据集进行分类。留出最后的10%作为测试集用来测试预测的精确度。

from sklearn import datasets,neighbors,linear_model
digits = datasets.load_digits()
X_digits = digits.data
y_digits = digits.target

【完整代码】

from sklearn import datasets,linear_model
digits = datasets.load_digits()
X_digits = digits.data
y_digits = digits.target
n_samples = len(X_digits)
X_train = X_digits[:.9 * n_samples]
y_train = y_digits[:.9 * n_samples]
X_test = X_digits[.9 * n_samples:]
y_test = y_digits[.9 * n_samples:]
knn = neighbors.KNeighborsClassifier()
logistic = linear_model.LogisticRegression()print('KNN score: %f' % knn.fit(X_train,y_train).score(X_test,y_test))print('LogisticRegression score: %f'
 ? ? ?% logistic.fit(X_train,y_test))

(3)支持向量机(SVMs)

线性SVNs:
支持向量机属于判别模型家族:它们尝试寻找样例的一个组合,构建一个两类之间的最大边缘平面。通过C参数进行正则化:一个较小的C意味着边缘是通过分割线周围的所有观测样例进行计算得到的(更规整化,正则化);一个较大的C意味着边缘是通过邻近分割线的观测样例计算得到的(更少的规整化,正则化):

  • 非正则化SVN:

  • 正则化 SVM(默认):

样例:Plot different SVM分类器 iris数据集

SVMs能够被用于回归——SVR(支持向量回归)—用于分类——SVC(支持向量分类)
from sklearn import svm
svc = svm.SVC(kernel='linear')
svc.fit(iris_X_train,iris_y_train)
【警告】:规格化数据
对于大多数的估测模型,包括SVMs,处理好单位标准偏差对于获得一个好的预测是很重要的。

使用核函数:
在特征空间中类别不经常是线性可分的。解决方案是构建一个非线性但能用多项式代替的决策函数。这要通过核技巧实现:使用核可以被看作通过设置核在观测样例上创建决策力量。

  • 线性核:

  • 多项式核:

  • 径向基函数核(RBF,Radial Basis Function):

svc = svm.SVC(kernel='rbf')

交互式样例:
参照SVM GUI,下载svm_gui.py;通过鼠标左右键设置两类数据点,拟合模型并改变参数和数据。

练习:

尝试使用SVMs根据iris数据集前两个特征将其分成两类。留出每一类的10%作为测试样例。
【警告】数据集中的数据是按照分类顺序排列的,不要留出最后的10%作为测试样例,要不然你只能测试一种类别。(获取训练集和测试集是注意要进行混淆)
提示:你可以在一个网格上使用decision_function方法获得直观的呈现。

iris = datasets.load_iris()
X = iris.data
y = iris.target
X = X[y != 0,:2]
y = y[y != 0]


完整代码:

"""================================SVM Exercise================================A tutorial exercise for using different SVM kernels.This exercise is used in the :ref:`using_kernels_tut` part of the:ref:`supervised_learning_tut` section of the :ref:`stat_learn_tut_index`."""print(__doc__)import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasets,svm
iris = datasets.load_iris()
X = iris.data
y = iris.target
X = X[y != 0,:2]
y = y[y != 0]
n_sample = len(X)
np.random.seed(0)
order = np.random.permutation(n_sample)
X = X[order]
y = y[order].astype(np.float)
X_train = X[:.9 * n_sample]
y_train = y[:.9 * n_sample]
X_test = X[.9 * n_sample:]
y_test = y[.9 * n_sample:]# fit the modelfor fig_num,kernel in enumerate(('linear','rbf','poly')):
 ? ?clf = svm.SVC(kernel=kernel,gamma=10)
 ? ?clf.fit(X_train,y_train)
 ? ?plt.figure(fig_num)
 ? ?plt.clf()
 ? ?plt.scatter(X[:,0],X[:,1],c=y,zorder=10,cmap=plt.cm.Paired) ? ?# Circle out the test data
 ? ?plt.scatter(X_test[:,X_test[:,s=80,facecolors='none',zorder=10)
 ? ?plt.axis('tight')
 ? ?x_min = X[:,0].min()
 ? ?x_max = X[:,0].max()
 ? ?y_min = X[:,1].min()
 ? ?y_max = X[:,1].max()
 ? ?XX,YY = np.mgrid[x_min:x_max:200j,y_min:y_max:200j]
 ? ?Z = clf.decision_function(np.c_[XX.ravel(),YY.ravel()]) ? ?# Put the result into a color plot
 ? ?Z = Z.reshape(XX.shape)
 ? ?plt.pcolormesh(XX,YY,Z > 0,cmap=plt.cm.Paired)
 ? ?plt.contour(XX,Z,colors=['k','k','k'],linestyles=['--','-','--'],? ? ? ? ? ? ? ?levels=[-.5,0,.5])
 ? ?plt.title(kernel)
plt.show()

三、模型选择:选择模型和他们的参数

(1)分数,和交叉验证分数

众所周知,每一个模型会得出一个score方法用于裁决模型在新的数据上拟合的质量。其值越大越好。

from sklearn import datasets,svm
digits = datasets.load_digits()
X_digits = digits.data
 y_digits = digits.target
svc = svm.SVC(C=1,kernel='linear')
svc.fit(X_digits[:-100],y_digits[:-100]).score(X_digits[-100:],y_digits[-100:])

为了获得一个更好的预测精确度度量,我们可以把我们使用的数据折叠交错地分成训练集和测试集:

import numpy as np
X_folds = np.array_split(X_digits,3)
y_folds = np.array_split(y_digits,3)
scores = list()for k in range(3): ? ?# We use 'list' to copy,in order to 'pop' later on
 ? ?X_train = list(X_folds)
 ? ?X_test ?= X_train.pop(k)
 ? ?X_train = np.concatenate(X_train)
 ? ?y_train = list(y_folds)
 ? ?y_test ?= y_train.pop(k)
 ? ?y_train = np.concatenate(y_train)
 ? ?scores.append(svc.fit(X_train,y_test))print(scores)

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读