1、python之sklearnpython之sklearn Scikit Learn: 在python中机器学习Warning警告:有些没能理解的句子,我以自己的理解意译。翻译自:Scikit Learn:Machine Learning in Python作者: Fabian Pedregosa, Gael Varoquaux先决条件Numpy, ScipyIPythonmatplotlibscikitlearn目录 载入示例数据一个改变数据集大小的示例:数码数据集(digitsdatasets)学习和预测分类K最近邻(KNN)分类器训练集和测试集分类支持向量机(SVMs)线性支持向量机使用核
2、聚类:将观测值聚合k均值聚类应用到图像压缩用主成分分析降维将一切放在一起:人脸识别线性模型:从回归到稀疏稀疏模型同一问题的不同算法模型选择:选择估计器和它们的参数格点搜索和交叉验证估计器格点搜索交叉验证估计器Footnotes警告:在0。9版中(2011年9月发行),scikit-learn的导入路径从scikits。learn更改为sklearn载入示例数据首先我们载入一些用来玩耍的数据。我们将使用的数据是非常简单的著名的花朵数据-安德森鸢尾花卉数据集。我们有一百五十个鸢尾花的一些尺寸的观测值:萼片长度、宽度,花瓣长度和宽度.还有它们的亚属:山鸢尾(Iris setosa)、变色鸢尾(Iri
3、s versicolor)和维吉尼亚鸢尾(Iris virginica)向Python对象载入数据:In 1: from sklearn import datasetsIn 2: iris = datasets.load_iris()数据存储在。data项中,是一个(n_samples, n_features)数组。In 3: iris.data.shapeOut3: (150, 4)每个观察对象的种类存贮在数据集的。target属性中.这是一个长度为n_samples的整数一维数组:In 5: iris.target.shapeOut5: (150,)In 6: import numpy a
4、s npIn 7: np。unique(iris。target)Out7: array(0, 1, 2)一个改变数据集大小的示例:数码数据集(digits datasets)数码数据集1包括1797个图像,每一个都是个代表手写数字的8x8像素图像In 8: digits = datasets。load_digits()In 9: digits。images。shapeOut9: (1797, 8, 8)In 10: import pylab as plIn 11: pl.imshow(digits.images0, cmap=pl。cm.gray_r) Out11: lt;matplotlib
5、。image。AxesImage at 0x3285b90gt;In 13: pl。show()为了在scikit中使用这个数据集,我们把每个8x8图像转换成长度为64的矢量。(译者注:或者直接用digits.data)In 12: data = digits.images.reshape((digits。images。shape0, 1))学习和预测现在我们已经获得一些数据,我们想要从中学习和预测一个新的数据。在scikitlearn中,我们通过创建一个估计器(estimator)从已经存在的数据学习,并且调用它的fit(X,Y)方法.In 14: from sklearn import s
6、vmIn 15: clf = svm。LinearSVC()In 16: clf。fit(iris.data, iris。target) learn from the data Out16: 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
7、( 5.0, 3.6, 1.3, 0。25)Out17: array(0, dtype=int32)注意:我们可以通过它以下划线结束的属性存取模型的参数:In 18: clf.coef_ Out18: 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维空间中最
8、靠近它的训练样本标签给它.其中n是每个样本中特性(features)数。k最近邻2分类器内部使用基于球树(balltree)3来代表它训练的样本.KNN分类示例:In 19: Create and fit a nearestneighbor classifierIn 20: from sklearn import neighborsIn 21: knn = neighbors。KNeighborsClassifier()In 22: knn。fit(iris.data, iris.target) Out22: KNeighborsClassifier(algorithm=auto, leaf_
9、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)Out23: array(0)训练集和测试集当验证学习算法时,不要用一个用来拟合估计器的数据来验证估计器的预测非常重要.确实,通过kNN估计器,我们将总是获得关于训练集完美的预测.In 24: perm = np.random。permutation(iris.target。size)In 25: iris。data = iris。datapermIn 26: iris.targ
10、et = iris。targetpermIn 27: knn.fit(iris。data:100, iris。target:100) Out27: KNeighborsClassifier(algorithm=auto, leaf_size=30, n_neighbors=5, p=2, warn_on_equidistant=True, weights=uniform)In 28: knn。score(iris。data100:, iris。target100:) /usr/lib/python2.7/site-packages/sklearn/neighbors/classificatio
11、n.py:129: NeighborsWarning: kneighbors: neighbor k+1 and neighbor k have the same distance: results will be dependent on data order. neigh_dist, neigh_ind = self。kneighbors(X)Out28: 0.95999999999999996Bonus的问题:为什么我们使用随机的排列?分类支持向量机(SVMs)线性支持向量机SVMs4尝试构建一个两个类别的最大间隔超平面。它选择输入的子集,调用支持向量即离分离的超平面最近的样本点。In
12、60: from sklearn import svmIn 61: svc = svm.SVC(kernel=linear)In 62: svc。fit(iris。data, iris。target)Out62: 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,
13、svm。NuSVC和svm.LinearSVC;“SVC代表支持向量分类器(Support Vector Classifier)(也存在回归SVMs,在scikit-learn中叫作“SVR).练习训练一个数字数据集的svm.SVC.省略最后10%并且检验观测值的预测表现。使用核类别不总是可以用超平面分离,所以人们指望有些可能是多项式或指数实例的非线性决策函数:线性核svc = svm。SVC(kernel=linear)多项式核svc = svm。SVC(kernel=poly, degree=3) degree: polynomial degreeRBF核(径向基函数)5svc = svm
14、.SVC(kernel=rbf) gamma: inverse of size of radial kernel练习以上提到的哪些核对数字数据集有更好的预测性能?(译者:前两个)聚类:将观测值聚合给定鸢尾花数据集,如果我们知道这有三种鸢尾花,但是无法得到它们的标签,我们可以尝试非监督学习:我们可以通过某些标准聚类观测值到几个组别里.k均值聚类最简答的聚类算法是k均值算法.这将一个数据分成k个集群,以最小化观测值(n维空间中)到聚类中心的均值来分配每个观测点到集群;然后均值重新被计算。这个操作递归运行直到聚类收敛,在max_iter回合内到最大值。6(一个替代的k均值算法实现在scipy中的cl
15、uster包中。这个scikit-learn实现与之不同,通过提供对象API和几个额外的特性,包括智能初始化。)In 82: from sklearn import cluster, datasetsIn 83: iris = datasets.load_iris()In 84: k_means = cluster.KMeans(k=3)In 85: k_means.fit(iris。data) Out85: KMeans(copy_x=True, init=kmeans+, k=3, max_iter=300, n_init=10, n_jobs=1, precompute_distances=Tr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1