Scikit-learn section1 for cvpytorch

这是一个重要的机器学习库,它提供了许多机器学习必备的知识。虽然我以前也没怎么用过,但是当你打开它的官方网页,你可以发现许多再学习机器学习、深度学习、计算机视觉时看到的一些概念核词汇,而且他在Github上也是十分受欢迎的,所以我准备和大家一起学一学。个人认为这部分挺重要的,所以我会按照官网详细学习。

英文官方教程链接

https://scikit-learn.org/stable/tutorial/index.htmlhttps://scikit-learn.org/stable/tutorial/index.html如有侵权,务必联系删除。

官方指定中文社区链接https://scikit-learn.org.cn/lists/2.htmlhttps://scikit-learn.org.cn/lists/2.html我觉得自己英文水平也不是太好,所以就以英文为主,中文为辐了。

An introduction to machine learning with scikit-learn部分

 学习问题包含两类:监督学习、无监督学习。

监督学习里,数据有我们想要预测的额外的属性。它涉及分类和回归。

无监督学习里,训练数据没有对应的目标值。

再我们接触机器学习的时候,沃恩经常要做的事情就是将数据划分成训练集核测试集(有时也包括验证集),吴恩达前辈给出过视频详解。链接如下:(FlyAI上的链接打不开了,所以用了这个)

https://www.bilibili.com/video/BV1FT4y1E74V?p=47https://www.bilibili.com/video/BV1FT4y1E74V?p=47


加载并查看鸢尾花数据集:

import sklearn.datasets as datasets
iris = datasets.load_iris()
keys = iris.keys()
print(keys)
#dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
data = iris['data']
print(len(data))
#150
print(data)
#[5.1 3.5 1.4 0.2]
#[4.9 3.  1.4 0.2]
#[4.7 3.2 1.3 0.2]
#numpy数组,形状(150,4)这里我截取了150个数据里的前3个,
target = iris['target']
print(target)
#numpy数组,形状(150,),50个0,50个1,50个2
frame = iris['frame']
print(frame)
#None
target_names = iris['target_names']
print(target_names.shape)
#numpy数组,形状(3,),['setosa' 'versicolor' 'virginica']
DESCR = iris['DESCR']
print(DESCR)
#描述,具体内容见如下文字段
feature_names = iris['feature_names']
print(feature_names)
#numpy数组,形状(1,4),['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
filename = iris['filename']
print(filename)
#iris.csv
data_module = iris['data_module']
print(data_module)
#sklearn.datasets.data

对数据集的描述:

鸢尾花数据集,有3各类别(山鸢尾、变色鸢尾、弗吉尼亚鸢尾),150个实例,每类各占50。数据有4种属性,分别是萼片长度(cm)、萼片宽度(cm)、花瓣长度(cm)、花瓣宽度(cm),分别对应代码里的(150,4)形状的numpy数组的每个元素的4个元素。

下面是R.A. Fisher(数据集创建者)的统计摘要:

最小最大平均SD(?)类关联
萼片长度4.37.95.840.830.7826
萼片宽度2.04.43.050.43-0.4194
花瓣长度1.06.93.761.760.9490
花瓣宽度0.12.51.200.760.9565

学习和预测:

按照官网给出的例子,我们用 fit 函数拟合,用 predict 函数预测,使用的是手写数字数据,大家可以按照我上面的方式对数据内容仔细查看,有时候对手头的数据进行分析也是一门技术活,对完成任务是很有帮助的。

import sklearn.datasets as datasets
import sklearn.svm as svm
import matplotlib.pyplot as plt
digits = datasets.load_digits()
classifier = svm.SVC(gamma=0.001,C=100.)
fit = classifier.fit(digits.data[:-1],digits.target[:-1])
predict = classifier.predict(digits.data[-1:])
print(predict)
#[8]
plt.imshow(digits.images[-1])
plt.show()

这是支持向量机分类,它先将训练集传给 fit 方法。如上官网代码,它再训练集中使用了除最后一张图片之外的所有图片,最后一张用作预测。data的长度是1797,训练的时候只用了1796张图片。target的前10个值是0~9,最后一个是8(说实话,这个8是做什么用的我还没弄明白)。我们可以看到,最后一张图片的预测值是8。我们可视化一下最后一张图片如下:

虽然分辨率很低,但是我们还是可以看出它就是8的。所以这个分类的效果还不错。这里我只是按照官方的实现了一下,具体的细节可以自己写代码查看图像和数据集的具体内容。 这一部分代码可能不是那么好(至少我是这么觉得的,我认为还是按照第一片代码的风格来写好一些)


约定、惯例:

在没有特别说明的情况下,输入都是被映射到 float64 数据类型的。如下代码:

import numpy as np
from sklearn import random_projection
a = np.arange(0,19730).reshape(10,1973)
a = np.array(a,dtype=int)
b = random_projection.GaussianRandomProjection()
c = b.fit_transform(a)
print(a.dtype)
#int32
print(c.dtype)
#float64

这里要注意的是根据官方的API,

fit_transform(self, X, y=None, **fit_params)

这里X的形状为(n_samples,n_features),Y的形状为(n_samples,)或者(n_samples,n_outputs),Y可以不传入。但是n_features>=1973,否则或报错。这个函数后面再具体讲解,先知道一下数据类型就行。

评估其的超参数可以用 set_params() 方法来更新。具体内容大家可以看看原始函数,我也不是特别明白它到底是做什么的。官网上的这一网页下面的两个内容我也就不说了,希望不要误导大家。


希望这一部分对大家有用。第一块我是真的弄懂了,大家可以参考一下。第二块我还存在疑问。欢迎前辈、同辈、后辈的指正,学会了也可以教我一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值