Python与机器学习:使用Scikit-learn进行数据建模

简介: 本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。

Python与机器学习:使用Scikit-learn进行数据建模

机器学习是当今数据科学和人工智能领域的重要组成部分。随着数据量的不断增长,如何从中提取有价值的信息成为了一个重要挑战。Python,作为一种高效且易于学习的编程语言,成为了进行机器学习建模的首选语言之一。本文将通过Scikit-learn库展示如何进行数据建模。

什么是Scikit-learn?

Scikit-learn是一个用于机器学习的Python库,提供了一系列简单而高效的工具,用于数据挖掘和数据分析。它建立在NumPy、SciPy和Matplotlib等基础库之上,支持分类、回归、聚类和降维等多种算法。该库的易用性和强大功能使其在数据科学和机器学习领域得到了广泛应用。

数据准备

在机器学习建模之前,数据准备是一个至关重要的步骤。这包括数据的清洗、处理和特征选择等。我们将使用著名的鸢尾花(Iris)数据集进行演示,该数据集包含150个样本,每个样本由四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和一个目标变量(鸢尾花种类)组成。

导入必要的库

首先,导入所需的库和模块:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

加载数据集

使用Scikit-learn加载鸢尾花数据集,并将其转换为DataFrame格式,以便更方便地进行数据处理:

# 加载鸢尾花数据集
iris = datasets.load_iris()
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
iris_df['target'] = iris.target
print(iris_df.head())

数据可视化

在进行建模之前,数据可视化是一个很好的工具,可以帮助我们理解数据分布和特征之间的关系。我们可以使用Seaborn库进行可视化:

# 可视化数据分布
sns.pairplot(iris_df, hue='target', palette='bright')
plt.show()

数据预处理

在建模之前,我们需要对数据进行预处理。这包括分割数据集、标准化特征等。

分割数据集

将数据集分为训练集和测试集,以便于评估模型的性能:

# 分割数据集
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

print(f"训练集大小: {X_train.shape}, 测试集大小: {X_test.shape}")

特征标准化

标准化特征可以提高某些模型的性能,尤其是基于距离的算法(如KNN、SVM等):

# 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

模型构建与评估

构建模型

我们将使用K近邻算法(KNN)作为示例,展示如何使用Scikit-learn构建机器学习模型:

from sklearn.neighbors import KNeighborsClassifier

# 创建KNN模型
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

模型预测

使用训练好的模型对测试集进行预测:

# 进行预测
y_pred = knn.predict(X_test)

模型评估

我们将使用混淆矩阵和准确率来评估模型的性能:

from sklearn.metrics import confusion_matrix, accuracy_score

# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:\n", conf_matrix)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")

超参数调优

在机器学习中,模型的性能往往受到超参数的影响。超参数是模型在训练过程中不会更新的参数。对于K近邻算法而言,超参数主要包括邻居数(n_neighbors)和权重(weights)。我们可以使用网格搜索(Grid Search)来寻找最佳超参数组合。

网格搜索

Scikit-learn提供了GridSearchCV类,可以方便地进行超参数调优。以下是使用网格搜索对KNN模型进行调优的示例:

from sklearn.model_selection import GridSearchCV

# 定义超参数范围
param_grid = {
   
    'n_neighbors': [1, 3, 5, 7, 9],
    'weights': ['uniform', 'distance']
}

# 创建网格搜索模型
grid_search = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 输出最佳超参数组合
print("最佳超参数组合:", grid_search.best_params_)

使用最佳超参数训练模型

使用找到的最佳超参数重新训练KNN模型,并评估其性能:

# 使用最佳超参数创建KNN模型
best_knn = grid_search.best_estimator_
best_knn.fit(X_train, y_train)

# 进行预测
y_best_pred = best_knn.predict(X_test)

# 计算混淆矩阵和准确率
best_conf_matrix = confusion_matrix(y_test, y_best_pred)
best_accuracy = accuracy_score(y_test, y_best_pred)

print("最佳超参数模型混淆矩阵:\n", best_conf_matrix)
print(f"最佳超参数模型准确率: {best_accuracy:.2f}")

模型的可解释性

在某些情况下,理解模型的决策过程对于业务和数据科学家来说至关重要。对于KNN模型,可以通过查看特征重要性来理解模型的预测。这可以通过可视化方法来实现。

特征重要性可视化

由于KNN是一种基于实例的算法,其特征重要性并不像其他模型(如决策树或线性回归)那样直接。然而,我们可以使用permutation_importance来估计特征的重要性。以下是如何实现这一点的示例:

from sklearn.inspection import permutation_importance

# 计算特征重要性
result = permutation_importance(best_knn, X_test, y_test, n_repeats=10, random_state=42)

# 创建特征重要性图
sorted_idx = result.importances_mean.argsort()
plt.barh(range(len(sorted_idx)), result.importances_mean[sorted_idx], align='center')
plt.yticks(range(len(sorted_idx)), np.array(iris.feature_names)[sorted_idx])
plt.xlabel("特征重要性")
plt.title("KNN模型特征重要性")
plt.show()

其他模型的比较

在实际应用中,可能需要尝试不同的模型以找到最佳解决方案。除了KNN,我们还可以使用其他流行的模型进行比较,如支持向量机(SVM)、随机森林和逻辑回归。

随机森林示例

以下是使用随机森林模型的示例代码:

from sklearn.ensemble import RandomForestClassifier

# 创建随机森林模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

# 进行预测
rf_pred = rf_model.predict(X_test)

# 计算混淆矩阵和准确率
rf_conf_matrix = confusion_matrix(y_test, rf_pred)
rf_accuracy = accuracy_score(y_test, rf_pred)

print("随机森林模型混淆矩阵:\n", rf_conf_matrix)
print(f"随机森林模型准确率: {rf_accuracy:.2f}")

支持向量机(SVM)示例

我们也可以尝试SVM模型:

from sklearn.svm import SVC

# 创建SVM模型
svm_model = SVC(kernel='linear', random_state=42)
svm_model.fit(X_train, y_train)

# 进行预测
svm_pred = svm_model.predict(X_test)

# 计算混淆矩阵和准确率
svm_conf_matrix = confusion_matrix(y_test, svm_pred)
svm_accuracy = accuracy_score(y_test, svm_pred)

print("SVM模型混淆矩阵:\n", svm_conf_matrix)
print(f"SVM模型准确率: {svm_accuracy:.2f}")

比较模型性能

为了更好地比较这些模型的性能,我们可以将它们的准确率汇总在一个表格中:

# 汇总模型准确率
results = {
   
    '模型': ['KNN', '随机森林', 'SVM'],
    '准确率': [accuracy, rf_accuracy, svm_accuracy]
}

results_df = pd.DataFrame(results)
print(results_df)

结论与展望

在本节中,我们详细探讨了如何使用Scikit-learn进行机器学习数据建模,涵盖了数据预处理、模型构建、超参数调优和模型比较等内容。通过使用不同的模型和超参数,我们能够找到最适合特定任务的解决方案。

未来,随着深度学习和大数据技术的发展,结合Scikit-learn与深度学习框架(如TensorFlow和PyTorch)将为机器学习建模开辟新的方向。希望读者能通过本文掌握基础的机器学习建模技巧,并在实践中不断探索和创新。

image-20250223154507142

相关文章
|
8月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
327 7
|
6月前
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
982 12
Scikit-learn:Python机器学习的瑞士军刀
|
8月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
8月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
12月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1149 6
|
6月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
|
7月前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
299 6
|
9月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。

推荐镜像

更多