你必须亲自动手实践。
你可以阅读所有博客文章,观看世界上所有的视频,但除非你开始练习,否则你实际上无法真正掌握机器学习。
scikit-learn Python 库非常容易上手。尽管如此,我看到很多初学者在入门时犹豫不决。在这篇博文中,我想提供一些使用 scikit-learn 进行监督分类算法的非常简单的示例。
通过我的新书《Python 机器学习精通》来**启动你的项目**,书中包含分步教程和所有示例的Python 源代码文件。
让我们开始吧。
Scikit-Learn 菜谱
你不需要了解和使用 scikit-learn 中的所有算法,至少一开始是这样。选择一两个(或几个),只用那些进行练习。
在这篇文章中,你将看到 5 个监督分类算法的菜谱,这些算法应用于 scikit-learn 库自带的小型标准数据集。
这些菜谱是有原则的。每个示例都是
- 独立的:每个代码示例都是一个独立的、完整的、可执行的菜谱。
- 纯代码:每个菜谱的重点在于代码,而对机器学习理论的阐述最少。
- 简单的:菜谱展示了常见的用例,这可能正是你想要的。
- 一致的:所有代码示例都以一致的方式呈现,并遵循相同的代码模式和风格约定。
这些菜谱不探讨给定算法的参数。它们提供了一个你可以复制粘贴到你的文件、项目或 Python REPL 中并立即开始使用的框架。
这些菜谱向你展示了你可以立即开始练习 scikit-learn。停止拖延。
逻辑回归
逻辑回归将逻辑模型拟合到数据,并对事件的概率(0到1之间)进行预测。
此菜谱展示了如何将逻辑回归模型拟合到鸢尾花数据集。由于这是一个多类分类问题,而逻辑回归的预测在0到1之间,因此使用了“一对多”方案(每个类一个模型)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 逻辑回归 from sklearn import datasets from sklearn import metrics from sklearn.linear_model import LogisticRegression # 加载鸢尾花数据集 dataset = datasets.load_iris() # 将逻辑回归模型拟合到数据 model = LogisticRegression() model.fit(dataset.data, dataset.target) print(model) # 进行预测 expected = dataset.target predicted = model.predict(dataset.data) # 总结模型的拟合情况 print(metrics.classification_report(expected, predicted)) print(metrics.confusion_matrix(expected, predicted)) |
有关配置算法参数的更多信息,请参阅逻辑回归的 API 参考。另请参阅用户指南的逻辑回归部分。
朴素贝叶斯
朴素贝叶斯使用贝叶斯定理来模拟每个属性与类别变量的条件关系。
此菜谱展示了如何将朴素贝叶斯模型拟合到鸢尾花数据集。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 高斯朴素贝叶斯 from sklearn import datasets from sklearn import metrics from sklearn.naive_bayes import GaussianNB # 加载鸢尾花数据集 dataset = datasets.load_iris() # 将朴素贝叶斯模型拟合到数据 model = GaussianNB() model.fit(dataset.data, dataset.target) print(model) # 进行预测 expected = dataset.target predicted = model.predict(dataset.data) # 总结模型的拟合情况 print(metrics.classification_report(expected, predicted)) print(metrics.confusion_matrix(expected, predicted)) |
有关配置算法参数的更多信息,请参阅高斯朴素贝叶斯的 API 参考。另请参阅用户指南的朴素贝叶斯部分。
k-最近邻
k-最近邻 (kNN) 方法通过定位与给定数据实例相似的实例(使用相似性函数)来做出预测,并返回最相似数据实例的平均值或多数。kNN 算法可用于分类或回归。
此菜谱展示了如何使用 kNN 模型对鸢尾花数据集进行预测。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# k-最近邻 from sklearn import datasets from sklearn import metrics from sklearn.neighbors import KNeighborsClassifier # 加载鸢尾花数据集 dataset = datasets.load_iris() # 将 k-最近邻模型拟合到数据 model = KNeighborsClassifier() model.fit(dataset.data, dataset.target) print(model) # 进行预测 expected = dataset.target predicted = model.predict(dataset.data) # 总结模型的拟合情况 print(metrics.classification_report(expected, predicted)) print(metrics.confusion_matrix(expected, predicted)) |
有关配置算法参数的更多信息,请参阅k-最近邻的 API 参考。另请参阅用户指南的k-最近邻部分。
分类与回归树
分类和回归树 (CART) 是通过选择最佳分割数据的分割点来从数据集中构建的,以便分离类别或正在进行的预测。CART 算法可用于分类或回归。
此菜谱展示了如何使用 CART 模型对鸢尾花数据集进行预测。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 决策树分类器 from sklearn import datasets from sklearn import metrics from sklearn.tree import DecisionTreeClassifier # 加载鸢尾花数据集 dataset = datasets.load_iris() # 将 CART 模型拟合到数据 model = DecisionTreeClassifier() model.fit(dataset.data, dataset.target) print(model) # 进行预测 expected = dataset.target predicted = model.predict(dataset.data) # 总结模型的拟合情况 print(metrics.classification_report(expected, predicted)) print(metrics.confusion_matrix(expected, predicted)) |
有关配置算法参数的更多信息,请参阅CART 的 API 参考。另请参阅用户指南的决策树部分。
支持向量机
支持向量机 (SVM) 是一种使用经过转换的问题空间中的点来最佳地将类别分成两组的方法。通过“一对多”方法支持多类别分类。SVM 还通过对具有最小允许误差的函数进行建模来支持回归。
此菜谱展示了如何使用 SVM 模型对鸢尾花数据集进行预测。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 支持向量机 from sklearn import datasets from sklearn import metrics from sklearn.svm import SVC # 加载鸢尾花数据集 dataset = datasets.load_iris() # 将 SVM 模型拟合到数据 model = SVC() model.fit(dataset.data, dataset.target) print(model) # 进行预测 expected = dataset.target predicted = model.predict(dataset.data) # 总结模型的拟合情况 print(metrics.classification_report(expected, predicted)) print(metrics.confusion_matrix(expected, predicted)) |
有关配置算法参数的更多信息,请参阅SVM 的 API 参考。另请参阅用户指南的SVM 部分。
总结
在这篇文章中,你看到了 5 个独立的菜谱,演示了一些最受欢迎和强大的监督分类问题。
每个示例的代码都不到 20 行,你可以复制粘贴并立即开始使用 scikit-learn。停止阅读,开始练习。选择一个菜谱并运行它,然后开始调整参数,看看它对结果有什么影响。
感谢 Jason 的这些内容。您能否也提供神经网络 (MLP) 的内容?
感谢这个信息丰富的教程。
您能解释一下逻辑回归是如何用于涉及多个类别的分类的吗?
谢谢
Ajinkya,好问题。
通常,你可以将一个为二元(两类)分类设计的算法,通过使用“一对多”的元算法将其转化为多类分类算法。你创建 n 个模型,其中 n 是类别的数量。每个模型都会进行预测,提供一个预测向量,最终的预测可以取为具有最高概率的类别对应的模型。
这可以与逻辑回归一起使用,并且在支持向量机中非常流行。
关于“一对多”元算法的更多信息
https://en.wikipedia.org/wiki/Multiclass_classification
嘿
非常感谢您提供的这些有用的示例!我找了很多地方才找到这个网站。您确实为我节省了很多时间和精力来完成大学的 ML 课程作业 🙂
继续保持出色的工作!
Nicolas,很高兴听到这个消息。
嗨 Jason,我该如何选择算法来比较一个“字符串”值的最近匹配,然后再测试其准确性?例如,我的数据中有一个国家值为 FR,但我需要 FRA,我该如何确保我预测 FRA 并向最终用户提供准确的预测匹配?抱歉,这是一个非常基本的问题,但我刚接触 ML,所以才问。
抱歉,我没有关于字符串匹配/相似性算法的资料。
亲爱的 Jason,
干得漂亮。
您能否展示如何实现其他算法或“如何钓鱼”?
谢谢。
Gill,哪些算法?
测试数据不应用于训练。这里您将完整的训练数据用作测试数据,这是错误的。
是的,我同意。这些只是关于如何在 sklearn 中拟合模型的示例。
感谢这个精彩的入门教程。它确实帮助我入门了。您能否解释一下如何解释结果?
谢谢。
当然,哪一部分?
感谢您的教程,非常有帮助。
我运行了 MNIST 数字识别,使用了朴素贝叶斯 (GaussianNB),结果与最近邻相比非常差。sklearn 是否有使用先验概率的贝叶斯函数?我搜索过但没找到。
谢谢,
Brian
我认为 sklearn 中的朴素贝叶斯应该会使用先验概率。
先验概率被忽略的唯一情况是当它们对等式没有贡献时(例如,两个类具有相同数量的观测值)。
问题……我正在尝试运行 `sklearn.naive_bayes import GaussianNB` 的代码
但在 Python 3.5 或 3.6 中似乎不起作用……
这是只在 Python 2 中运行的吗?
不。它可以在 py2 和 py3 中运行。
也许检查一下你的 sklearn 版本?
谢谢……升级了 sklearn,就可以工作了。
很高兴听到这个消息!
感谢您的信息,您能否发布有关使用定量和定性数据进行聚类分析或 K-means 的类似示例?
感谢您的建议。
太棒了。Scikit-learn 很棒。感谢分享!
谢谢。
您好 Jason,感谢您为此付出的时间和精力。教程非常流畅且信息丰富。继续加油。
谢谢。
嗨,Jason,
对于逻辑回归,我收到警告,建议我同时设置 solver 和 multi_class 参数。所以我使用了 `model = LogisticRegression(solver=”newton-cg”, multi_class=”ovr”)`,这解决了这些警告。
您能否分享一下这两个参数的作用?
谢谢,
Jim
是的,好问题,你可以在这里了解更多
https://machinelearning.org.cn/how-to-fix-futurewarning-messages-in-scikit-learn/
嗨
我该如何绘制 kNN 分类器预测的类别的散点图?
谢谢你
此致
Siya
您认为 scikit-learn 文档中的示例有帮助吗? https://scikit-learn.cn/stable/auto_examples/neighbors/plot_classification.html