今天给各位分享Scikit:Python数据分析与机器学习库的全面指南的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
翻译自:http://scikit-learn.org/stable/tutorial/basic/tutorial.html
本章内容
在本章中,我们将介绍使用scikit-learn 时遇到的机器学习术语,以及一个简单的机器学习示例。
机器学习:问题设置
一般来说,机器学习问题可以这样理解:我们有一个包含n个样本的数据集,想要预测未知数据的属性。如果有多个数字描述每个样本,例如多维条目(也称为多元数据),则该样本具有多个属性或特征。
我们可以将学习问题分为以下几类:
监督学习(无监督学习)是指数据包含我们想要预测的属性。有两种类型的监督学习问题:
分类(classification) :个样本属于两个或多个类别,我们希望通过从标记类别的数据中学习来预测未标记数据的分类。例如,识别手写数字是一个分类问题,其目标是将每个输入向量映射到有限数字类别。从另一个角度思考,分类是一种离散(而不是连续)形式的监督学习。对于n个样本,一侧有相应的有限数量的类别,另一侧尝试对样本进行标记并将其分配到正确的类别。
回归: 如果所需输出是一个或多个连续变量,则该任务称为回归,例如预测鲑鱼的长度作为年龄和体重的函数。
无监督学习的训练数据包括一组输入向量X,但没有相应的目标变量。这类问题的目标可以是发现数据中相似样本的分组,这称为聚类;也可以是确定输入样本空间中的数据分布,称为密度估计;或者也可以将数据从高维空间投影到二维或三维空间进行数据可视化。这是Scikit-Learn 的无监督学习主页。
加载样本数据集
scikit-learn 有一些标准数据集,例如用于分类的虹膜和数字数据集,以及用于回归的波士顿房价数据集。
接下来,我们将在shell 中使用Python 解释器来加载虹膜和数字数据集。 $代表shell提示符,代表Python解释器提示符:
$python
从sklearn导入数据集
iris=datasets.load_iris()
数字=datasets.load_digits()
数据集类似于字典对象,包括所有数据和关于数据的元数据。数据存储在.data 成员中,它是一个n_samples*n_features 的数组。对于监督问题,一个或多个因变量(响应变量)存储在.target 成员中。有关不同数据集的更多详细信息可以在此处找到。
例如,在digits数据集中,digits.data是可用于对数字样本进行分类的特征:
打印(数字.数据)#doctest: +NORMALIZE_WHITESPACE
[[ 0.0.5.0.0.0.]
[0。 0.0. 10.0.0.]
[0。 0.0. 16.9.0.]
.
[0。 0.1. 6.0.0.]
[0。 0.2. 12.0.0.]
[0。 0. 10. 12. 1. 0.]]
digits.target给出了数字数据集的真实值,即我们要预测的与每个数字模式对应的真实数字:
数字.目标
数组([0,1,2,8,9,8])
数据数组格式
数据是n_samples*n_features 的二维数组,尽管原始数据集可能具有不同的形式。在digits数据集中,每个原始样本都是一个8*8的数组,可以通过以下方式访问:
数字.图像[0]
数组([[ 0. 0. 5. 13. 9. 1. 0. 0.],
[0.0.13.15.10.15.5.0.]、
[0.3.15.2.0.11.8.0.]、
[0.4.12.0.0.8.8.0.]、
[0.5.8.0.0.9.8.0.]、
[0.4.11.0.1.12.7.0.]、
[0.2.14.5.10.12.0.0.]、
[0. 0. 6. 13. 10. 0. 0. 0.]])
这个简单的示例说明了如何形式化原始问题中的数据以供scikit-learn 使用。
学习和预测
在数字数据集中,我们的任务是预测给定模式下它代表什么数字。我们的样本有10 个可能的类别(数字0 到9),我们将匹配一个估计器来预测未知样本所属的类别。
在scikit-learn 中,分类预测器是一个实现fit(X, y) 和Predict(T) 方法的Python 对象。
以下预测器示例是classessklearn.svm.SVC,它实现支持向量机分类。创建分类器需要模型参数,但现在,让我们将预测器视为黑匣子:
从sklearn 导入svm
clf=svm.SVC(伽玛=0.001,C=100。)
选择型号参数
在此示例中,我们手动设置伽玛值。可以通过网格搜索和交叉验证等工具自动找到参数的最佳值。
为预测器命名为clf(分类器)。现在预测器必须拟合模型,也就是说,它必须从模型中学习。这个过程是通过将训练集传递给fit 方法来实现的。我们使用除最后一个样本之外的所有数据作为训练集。通过Python语法[:-1]选择训练集,这会生成一个包含digits.data的新数组,除了最后一个条目:
clf.fit(digits.data[:-1],digits.target[:-1]) # doctest: +NORMALIZE_WHITESPACE
SVC(C=100.0,cache_size=200,class_weight=无,coef0=0.0,度=3,
gamma=0.001,kernel="rbf",max_iter=-1,概率=False,
random_state=无,收缩=True,tol=0.001,verbose=False)
现在您可以预测新值。具体来说,我们可以询问分类器数字数据集中的最后一个模式代表什么。我们没有使用最后的数据来训练分类器。
clf.predict(digits.data[-1])
数组([8])
最后的模式如下:
正如您所看到的,这项任务具有挑战性:该图案的分辨率非常差。你能用分类器得到一致的结果吗?
更复杂的分类问题的例子在这里:识别手写数字(Recognizing hand-writingdigits)供学习参考。
模型持久化
可以使用Python内置的持久化模型pickle来保存scikit模型:
从sklearn 导入svm
从sklearn导入数据集
clf=svm.SVC()
iris=datasets.load_iris()
X, y=虹膜.数据, 虹膜.目标
clf.fit(X, y) # doctest: +NORMALIZE_WHITESPACE
SVC(C=1.0,cache_size=200,class_weight=无,coef0=0.0,度=3,gamma=0.0,
内核="rbf",max_iter=-1,概率=False,random_state=None,
收缩=真,tol=0.001,详细=假)
进口泡菜
s=pickle.dumps(clf)
clf2=pickle.loads(s)
clf2.预测(X[0])
数组([0])
y[0]
0
在scikit 的具体情况下,使用joblib 代替pickle (joblib.dumpjoblib.load) 会更有吸引力,它对于大数据更有效,但只能pickle 到磁盘而不是字符串:
从sklearn.externals 导入joblib
joblib.dump(clf, "文件名.pkl") # doctest: +SKIP
您可以稍后重新加载pickle 模型(可能在另一个Python 程序中):
clf=joblib.load("filename.pkl") # doctest:+SKIP
注意:
joblib.dump 返回文件名列表。 clf 对象中包含的每个独立的numpy 数组都是在文件系统中按顺序排列的单独文件。使用joblib.load 重新加载模型时,所有文件必须位于同一目录中。
请注意,pickle 存在一些安全和维护问题。有关scikit-learn 模型持久性的更多信息,请参阅模型持久性章节。
【Scikit:Python数据分析与机器学习库的全面指南】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于要好好学学机器学习了,听说Scikit很方便使用!
有14位网友表示赞同!
想知道Scikit有没有什么新的功能更新?
有19位网友表示赞同!
我已经开始用Scikit做一些分类任务了,效果还不错。
有10位网友表示赞同!
Scikit真的不愧为机器学习里的宝藏工具,强大又易用!
有11位网友表示赞同!
Scikit的文档写的真不错,很容易理解。
有16位网友表示赞同!
有没有人用Scikit做过预测模型?想要交流一下经验。
有13位网友表示赞同!
一直在想学Scikit,最近有时间了准备开始入门。
有19位网友表示赞同!
我最近比较感兴趣机器学习的聚类算法,Scikit里有什么好用的库吗?
有16位网友表示赞同!
Scikit的案例确实非常丰富,可以帮我们快速上手。
有17位网友表示赞同!
有没有人知道除了Scikit以外还有什么优秀的机器学习库?
有9位网友表示赞同!
想听听大家用Scikit开发出的 coolest 机器学习项目!
有16位网友表示赞同!
Scikit学习起来太有趣了,简直打开了我的新世界!
有6位网友表示赞同!
我对神经网络模型比较感兴趣,Scikit有没有配套的工具?
有7位网友表示赞同!
最近参加了一个数据挖掘比赛,要用到Scikit来解决问题。
有17位网友表示赞同!
Scikit真的很棒,它为初学者提供了通往机器学习世界的便捷道路!
有11位网友表示赞同!
希望以后能更深入地了解Scikit的原理和背后算法。
有7位网友表示赞同!
用Scikit学习到的知识,可以应用到实际项目中吗?
有19位网友表示赞同!
Scikit的开源性质很棒,方便大家共同进步!
有16位网友表示赞同!
推荐一些关于Scikit的进阶教程!
有6位网友表示赞同!
期待看到更多Scikit的社区活动和分享!
有17位网友表示赞同!