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

相关文章
|
1月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
107 7
|
5月前
|
机器学习/深度学习 数据采集 算法
深入调查研究Scikit-learn
【11月更文挑战第11天】
98 1
|
1月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
1月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
5月前
|
机器学习/深度学习 数据采集 数据处理
Scikit-learn Pipeline完全指南:高效构建机器学习工作流
Scikit-learn管道是构建高效、鲁棒、可复用的机器学习工作流程的利器。通过掌握管道的使用,我们可以轻松地完成从数据预处理到模型训练、评估和部署的全流程,极大地提高工作效率。
91 2
Scikit-learn Pipeline完全指南:高效构建机器学习工作流
|
5月前
|
机器学习/深度学习 数据采集
机器学习入门——使用Scikit-Learn构建分类器
机器学习入门——使用Scikit-Learn构建分类器
|
5月前
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
100 0
|
1月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
26天前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
83 28
|
1月前
|
Python
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
38 4

热门文章

最新文章

下一篇
oss创建bucket