10 KiB
美食分类器 2
在第二节分类课程中,您将探索更多分类数值数据的方法。同时,您还将了解选择不同分类器的影响。
课前测验
前提条件
我们假设您已经完成了之前的课程,并在本四节课程的根目录中的 data
文件夹中准备了一个名为 cleaned_cuisines.csv 的清理过的数据集。
准备工作
我们已经将清理过的数据集加载到您的 notebook.ipynb 文件中,并将其分为 X 和 y 数据框,准备进行模型构建。
分类地图
之前,您已经了解了使用微软的速查表对数据进行分类的各种选项。Scikit-learn 提供了一个类似但更详细的速查表,可以进一步帮助您缩小选择范围(分类器的另一种说法是估计器):
提示:在线访问此地图,点击路径以阅读相关文档。
计划
一旦您对数据有了清晰的理解,这张地图就非常有用,您可以沿着它的路径做出决策:
- 我们有 >50 个样本
- 我们希望预测一个类别
- 我们有标记数据
- 我们的样本少于 100K
- ✨ 我们可以选择一个线性 SVC
- 如果这不起作用,因为我们有数值数据
- 我们可以尝试 ✨ KNeighbors 分类器
- 如果这不起作用,可以尝试 ✨ SVC 和 ✨ 集成分类器
- 我们可以尝试 ✨ KNeighbors 分类器
这是一条非常有帮助的路径。
练习 - 划分数据
按照这条路径,我们应该先导入一些需要使用的库。
-
导入所需的库:
from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve import numpy as np
-
划分训练数据和测试数据:
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
线性 SVC 分类器
支持向量聚类(SVC)是支持向量机(SVM)机器学习技术家族的一部分(下面可以了解更多)。在这种方法中,您可以选择一个“核函数”来决定如何聚类标签。“C”参数指的是“正则化”,用于调节参数的影响。核函数可以是多种选项之一;这里我们将其设置为“线性”,以确保我们使用线性 SVC。概率默认值为“false”;这里我们将其设置为“true”,以获取概率估计。我们将随机状态设置为“0”,以打乱数据以获取概率。
练习 - 应用线性 SVC
首先创建一个分类器数组。随着测试的进行,您将逐步向该数组添加内容。
-
从线性 SVC 开始:
C = 10 # Create different classifiers. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
使用线性 SVC 训练您的模型并打印报告:
n_classifiers = len(classifiers) for index, (name, classifier) in enumerate(classifiers.items()): classifier.fit(X_train, np.ravel(y_train)) y_pred = classifier.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) print(classification_report(y_test,y_pred))
结果相当不错:
Accuracy (train) for Linear SVC: 78.6% precision recall f1-score support chinese 0.71 0.67 0.69 242 indian 0.88 0.86 0.87 234 japanese 0.79 0.74 0.76 254 korean 0.85 0.81 0.83 242 thai 0.71 0.86 0.78 227 accuracy 0.79 1199 macro avg 0.79 0.79 0.79 1199 weighted avg 0.79 0.79 0.79 1199
K-Neighbors 分类器
K-Neighbors 是机器学习方法中“邻居”家族的一部分,可用于监督学习和非监督学习。在这种方法中,创建了预定义数量的点,并围绕这些点收集数据,以便预测数据的通用标签。
练习 - 应用 K-Neighbors 分类器
之前的分类器表现不错,适合数据,但也许我们可以获得更好的准确性。尝试使用 K-Neighbors 分类器。
-
在分类器数组中添加一行(在线性 SVC 项目后添加逗号):
'KNN classifier': KNeighborsClassifier(C),
结果稍差一些:
Accuracy (train) for KNN classifier: 73.8% precision recall f1-score support chinese 0.64 0.67 0.66 242 indian 0.86 0.78 0.82 234 japanese 0.66 0.83 0.74 254 korean 0.94 0.58 0.72 242 thai 0.71 0.82 0.76 227 accuracy 0.74 1199 macro avg 0.76 0.74 0.74 1199 weighted avg 0.76 0.74 0.74 1199
✅ 了解 K-Neighbors
支持向量分类器
支持向量分类器是支持向量机机器学习方法家族的一部分,可用于分类和回归任务。SVM 将“训练样本映射到空间中的点”,以最大化两个类别之间的距离。后续数据被映射到该空间,以预测其类别。
练习 - 应用支持向量分类器
让我们尝试使用支持向量分类器获得更好的准确性。
-
在 K-Neighbors 项目后添加逗号,然后添加以下行:
'SVC': SVC(),
结果非常好!
Accuracy (train) for SVC: 83.2% precision recall f1-score support chinese 0.79 0.74 0.76 242 indian 0.88 0.90 0.89 234 japanese 0.87 0.81 0.84 254 korean 0.91 0.82 0.86 242 thai 0.74 0.90 0.81 227 accuracy 0.83 1199 macro avg 0.84 0.83 0.83 1199 weighted avg 0.84 0.83 0.83 1199
✅ 了解 支持向量
集成分类器
让我们沿着路径走到最后,尽管之前的测试结果已经非常好。尝试一些“集成分类器”,特别是随机森林和 AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)
结果非常好,尤其是随机森林:
Accuracy (train) for RFST: 84.5%
precision recall f1-score support
chinese 0.80 0.77 0.78 242
indian 0.89 0.92 0.90 234
japanese 0.86 0.84 0.85 254
korean 0.88 0.83 0.85 242
thai 0.80 0.87 0.83 227
accuracy 0.84 1199
macro avg 0.85 0.85 0.84 1199
weighted avg 0.85 0.84 0.84 1199
Accuracy (train) for ADA: 72.4%
precision recall f1-score support
chinese 0.64 0.49 0.56 242
indian 0.91 0.83 0.87 234
japanese 0.68 0.69 0.69 254
korean 0.73 0.79 0.76 242
thai 0.67 0.83 0.74 227
accuracy 0.72 1199
macro avg 0.73 0.73 0.72 1199
weighted avg 0.73 0.72 0.72 1199
✅ 了解 集成分类器
这种机器学习方法“结合多个基础估计器的预测”,以提高模型质量。在我们的示例中,我们使用了随机森林和 AdaBoost。
-
随机森林,一种平均方法,构建了一个随机性注入的“决策树森林”,以避免过拟合。n_estimators 参数设置为树的数量。
-
AdaBoost 将分类器拟合到数据集,然后将该分类器的副本拟合到同一数据集。它关注错误分类项的权重,并调整下一分类器的拟合以进行纠正。
🚀挑战
每种技术都有大量参数可以调整。研究每种技术的默认参数,并思考调整这些参数对模型质量的影响。
课后测验
复习与自学
这些课程中有很多术语,因此花点时间复习这个术语表,非常有用!
作业
免责声明:
本文档使用AI翻译服务Co-op Translator进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而引起的任何误解或误读,我们概不负责。