图片由编辑
Scikit-learn 是用 Python 构建的最常用的机器学习库之一。 它的受欢迎程度可归因于其简单且一致的代码结构,这对初学者开发人员很友好。 此外,还提供高水平的支持以及集成第三方功能的灵活性,这使得该库健壮且适合生产。 该库包含多个用于分类、回归和聚类的机器学习模型。 在本教程中,我们将通过各种算法探索多类分类问题。 让我们深入研究并构建我们的 scikit-learn 模型。
pip install scikit-learn
我们将使用 scikit-learn 的数据集模块中可用的“Wine”数据集。 该数据集共有 178 个样本和 3 个类别。 数据集已经过预处理并转换为特征向量,因此我们可以直接使用它来训练我们的模型。
from sklearn.datasets import load_wine X, y = load_wine(return_X_y=True)
我们将保留 67% 的数据用于训练,其余 33% 用于测试。
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42
)
现在,我们将试验 5 种不同复杂度的不同模型,并在我们的数据集上评估它们的结果。
model_lr = LogisticRegression()
model_lr.fit(X_train, y_train)
y_pred_lr = model_lr.predict(X_test) print("Accuracy Score: ", accuracy_score(y_pred_lr, y_test))
print(classification_report(y_pred_lr, y_test))
输出
Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59
model_knn = KNeighborsClassifier(n_neighbors=1)
model_knn.fit(X_train, y_train)
y_pred_knn = model_knn.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_knn, y_test))
print(classification_report(y_pred_knn, y_test))
输出
Accuracy Score: 0.7796610169491526 precision recall f1-score support 0 0.90 0.78 0.84 23 1 0.75 0.82 0.78 22 2 0.67 0.71 0.69 14 accuracy 0.78 59 macro avg 0.77 0.77 0.77 59
weighted avg 0.79 0.78 0.78 59
更改参数“n_neighbors=2”后,我们观察到准确性值下降。 因此,它表明数据足够简单并且可以通过考虑单个邻居实现更好的学习。
输出
Accuracy Score: 0.6949152542372882 precision recall f1-score support 0 0.90 0.72 0.80 25 1 0.75 0.69 0.72 26 2 0.33 0.62 0.43 8 accuracy 0.69 59 macro avg 0.66 0.68 0.65 59
weighted avg 0.76 0.69 0.72 59
from sklearn.naive_bayes import GaussianNB model_nb = GaussianNB()
model_nb.fit(X_train, y_train)
y_pred_nb = model_nb.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_nb, y_test))
print(classification_report(y_pred_nb, y_test))
输出
Accuracy Score: 1.0 precision recall f1-score support 0 1.00 1.00 1.00 20 1 1.00 1.00 1.00 24 2 1.00 1.00 1.00 15 accuracy 1.00 59 macro avg 1.00 1.00 1.00 59
weighted avg 1.00 1.00 1.00 59
from sklearn.tree import DecisionTreeClassifier model_dtclassifier = DecisionTreeClassifier()
model_dtclassifier.fit(X_train, y_train)
y_pred_dtclassifier = model_dtclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_dtclassifier, y_test))
print(classification_report(y_pred_dtclassifier, y_test))
输出
Accuracy Score: 0.9661016949152542 precision recall f1-score support 0 0.95 0.95 0.95 20 1 1.00 0.96 0.98 25 2 0.93 1.00 0.97 14 accuracy 0.97 59 macro avg 0.96 0.97 0.97 59
weighted avg 0.97 0.97 0.97 59
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV def get_best_parameters(): params = { "n_estimators": [10, 50, 100], "max_features": ["auto", "sqrt", "log2"], "max_depth": [5, 10, 20, 50], "min_samples_split": [2, 4, 6], "min_samples_leaf": [2, 4, 6], "bootstrap": [True, False], } model_rfclassifier = RandomForestClassifier(random_state=42) rf_randomsearch = RandomizedSearchCV( estimator=model_rfclassifier, param_distributions=params, n_iter=5, cv=3, verbose=2, random_state=42, ) rf_randomsearch.fit(X_train, y_train) best_parameters = rf_randomsearch.best_params_ print("Best Parameters:", best_parameters) return best_parameters parameters_rfclassifier = get_best_parameters() model_rfclassifier = RandomForestClassifier( **parameters_rfclassifier, random_state=42
) model_rfclassifier.fit(X_train, y_train) y_pred_rfclassifier = model_rfclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_rfclassifier, y_test))
print(classification_report(y_pred_rfclassifier, y_test))
输出
Best Parameters: {'n_estimators': 100, 'min_samples_split': 6, 'min_samples_leaf': 4, 'max_features': 'log2', 'max_depth': 5, 'bootstrap': True}
Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59
在这个算法中,我们进行了一些超参数调整以达到最佳精度。 我们定义了一个参数网格,其中包含多个值供每个参数选择。 此外,我们使用随机搜索 CV 算法来搜索模型的最佳参数空间。 最后,我们将获得的参数提供给分类器并训练模型。
型号 | 准确性 | 观察 |
Logistic回归 | 98.30% | 达到很高的准确性。 模型能够很好地概括测试数据集。 |
K最近邻居 | 77.96% | 该算法无法很好地学习数据表示。 |
朴素贝叶斯 | 100% | 该模型不太复杂,因此它过度拟合数据以获得绝对精度。 |
决策树分类器 | 96.61% | 达到不错的准确性。 |
随机森林分类器 | 98.30% | 作为一种基于集成的方法,它的性能优于决策树。 执行超参数调整使其达到与逻辑回归相似的精度。 |
在本教程中,我们学习了如何开始在 scikit-learn 中构建和训练机器学习模型。我们实现并评估了一些算法,以对其性能有一个基本的了解。人们总是可以采用先进的特征工程、超参数调整或训练策略来提高性能。要了解有关 scikit-learn 提供的功能的更多信息,请访问官方文档 - scikit-learn 机器学习简介, 使用 scikit-learn 在 Python 中进行机器学习.
耶沙沙斯特里 是一位充满热情的 AI 开发人员和作家,正在攻读蒙特利尔大学的机器学习硕士学位。 Yesha 热衷于探索负责任的 AI 技术,以解决造福社会的挑战,并与社区分享她的经验教训。
- 1
- 10
- 100
- 67
- 77
- 84
- 9
- 98
- a
- Able
- 关于我们
- 绝对
- 采用
- 高级
- AI
- 算法
- 算法
- 已经
- 时刻
- 和
- 的途径
- 汽车
- 可使用
- 基本包
- 得益
- 最佳
- 更好
- 引导
- 建立
- 建
- 挑战
- 改变
- 类
- 分类
- 集群
- 码
- 常用
- 社体的一部分
- 复杂
- 复杂性
- 考虑
- 一贯
- 组成
- 包含
- 转换
- data
- 数据集
- 决定
- 减少
- 开发商
- 开发
- 不同
- 不同的
- 直接
- 文件
- 每
- 工程师
- 更多
- 醚(ETH)
- 评估
- 评估
- 实验
- 探索
- 专栏
- 少数
- 终于
- 高度灵活
- 森林
- 友好
- 止
- 功能
- 进一步
- 得到
- 越来越
- 大
- 格
- 头
- 高
- 创新中心
- How To
- HTML
- HTTPS
- 超参数调整
- 主意
- 实施
- 进口
- 改善
- in
- 安装
- 整合
- IT
- 保持
- 学习用品
- 知道
- 学习
- Level
- 库
- 自学资料库
- 机
- 机器学习
- 宏
- 制作
- 硕士
- 模型
- 模型
- 模块
- 更多
- 最先进的
- 多
- 观察
- 获得
- 优惠精选
- 官方
- 一
- 参数
- 参数
- 多情
- 性能
- 执行
- 施行
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 声望
- 平台精度
- 市场问题
- 生产
- 蟒蛇
- 随机化
- 阅读
- 表示
- 提供品牌战略规划
- REST的
- 成果
- 回报
- 健壮
- scikit学习
- 搜索
- Share
- 作品
- 类似
- 简易
- 单
- 社会
- 解决
- 一些
- 太空
- 开始
- 策略
- 结构体
- 合适的
- SUPPORT
- 技术
- test
- 测试
- 其
- 第三方
- 通过
- 至
- 合计
- 培训
- 产品培训
- true
- 教程
- 使用
- 折扣值
- 价值观
- 各个
- 这
- 将
- 作家
- X
- 和风网