Scikit-Learn 基础教程

目录

[🐋Scikit-Learn 基础教程](#🐋Scikit-Learn 基础教程)

[🐋Scikit-Learn 简介](#🐋Scikit-Learn 简介)

[🐋 数据预处理](#🐋 数据预处理)

🦈数据集导入

🦈数据清洗

🦈特征选择

🦈特征标准化

[🐋 模型选择](#🐋 模型选择)

🦈分类模型

🦈回归模型

🦈聚类模型

🐋模型训练与评估

🦈交叉验证

🦈超参数调优

[🐋 模型保存与加载](#🐋 模型保存与加载)

[🐋 实战案例](#🐋 实战案例)

🦈分类问题:手写数字识别

🦈回归问题:波士顿房价预测

🦈聚类问题:鸢尾花数据集聚类分析

🐋总结


🐋Scikit-Learn 基础教程

  • Scikit-Learn(简称 sklearn)是一个基于 Python 的机器学习库。它构建在 NumPy、SciPy 和 Matplotlib 之上,为各种机器学习任务提供了简单而高效的工具。本文将详细解析 Scikit-Learn 的基础知识,并通过具体示例来展示其应用。

🐋Scikit-Learn 简介

  • Scikit-Learn 是一个开源的机器学习库,由 David Cournapeau 在 2007 年创建,并在 2010 年由 INRIA 进行发布。它以其简单易用、丰富的功能和良好的文档支持,成为了机器学习领域的重要工具。

Scikit-Learn 提供了以下主要功能:

  • 数据预处理:包括特征提取、归一化和降维等。
  • 模型选择:支持多种分类、回归和聚类算法。
  • 模型评估:提供了丰富的模型评估指标和交叉验证方法。
  • 模型调优:支持网格搜索和随机搜索等超参数调优方法。
  • 模型持久化:支持模型的保存和加载。

🐋 数据预处理

  • 数据预处理是机器学习流程中的重要环节,旨在将原始数据转换为适合模型训练的数据形式。Scikit-Learn 提供了一系列工具来简化这一过程。

🦈数据集导入

  • Scikit-Learn 提供了一些常用数据集,可以通过 datasets 模块直接加载。此外,还可以从 CSV、Excel 等文件中导入数据。
python 复制代码
from sklearn import datasets

# 加载鸢尾花数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target

🦈数据清洗

  • 数据清洗包括处理缺失值、去除重复数据等。可以使用 pandas 库进行数据清洗。
python 复制代码
import pandas as pd
from sklearn.impute import SimpleImputer

# 加载数据
data = pd.read_csv('data.csv')

# 填补缺失值
imputer = SimpleImputer(strategy='mean')
data_imputed = imputer.fit_transform(data)

🦈特征选择

  • 特征选择是从大量特征中选出对模型训练最有用的特征,Scikit-Learn 提供了多种特征选择方法,如基于方差、相关系数等。
python 复制代码
from sklearn.feature_selection import SelectKBest, f_classif

# 选择前 3 个最佳特征
selector = SelectKBest(score_func=f_classif, k=3)
X_new = selector.fit_transform(X, y)

🦈特征标准化

  • 特征标准化是将数据缩放到相同尺度,以提高模型训练效果。常用的标准化方法有 MinMaxScaler、StandardScaler 等。
python 复制代码
from sklearn.preprocessing import StandardScaler

# 标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

🐋 模型选择

  • Scikit-Learn 提供了多种机器学习模型,包括分类、回归和聚类模型。选择适合的模型是机器学习的关键步骤。

🦈分类模型

  • 分类模型用于解决离散标签的预测问题。常用的分类模型有逻辑回归、支持向量机、决策树、随机森林等。
python 复制代码
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

🦈回归模型

  • 回归模型用于预测连续值。常用的回归模型有线性回归、岭回归、Lasso 回归等。
python 复制代码
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 加载波士顿房价数据集
boston = datasets.load_boston()
X, y = boston.data, boston.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

🦈聚类模型

  • 聚类模型用于将数据分组,常用的聚类模型有 KMeans、DBSCAN、层次聚类等。
python 复制代码
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 训练 KMeans 模型
model = KMeans(n_clusters=3, random_state=42)
model.fit(X)

# 获取聚类结果
labels = model.labels_

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.show()

🐋模型训练与评估

🦈交叉验证

  • 交叉验证是一种评估模型性能的技术,通过多次训练和测试来获得更稳定的评估结果。Scikit-Learn 提供了 cross_val_score 函数进行交叉验证。
python 复制代码
from sklearn.model_selection import cross_val_score

# 进行 5 折交叉验证
scores = cross_val_score(model, X, y, cv=5)
print(f"Cross-validation scores: {scores}")
print(f"Mean score: {scores.mean()}")

🦈超参数调优

  • 超参数调优是通过调整模型的超参数来提升模型性能。Scikit-Learn 提供了网格搜索和随机搜索方法。
python 复制代码
from sklearn.model_selection import GridSearchCV

# 定义参数网格
param_grid = {
    'C': [0.1, 1, 10, 100],
    'solver': ['lbfgs', 'liblinear']
}

# 进行网格搜索
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 最佳参数
print(f"Best parameters: {grid_search.best_params_}")

🐋 模型保存与加载

  • Scikit-Learn 提供了简单的模型保存和加载方法,通过 joblib 库实现。
python 复制代码
import joblib

# 保存模型
joblib.dump(model, 'model.pkl')

# 加载模型
loaded_model = joblib.load('model.pkl')

🐋 实战案例

🦈分类问题:手写数字识别

  • 手写数字识别是经典的分类问题,可以使用 MNIST 数据集进行演示。
python 复制代码
from sklearn.datasets import load_digits
from sklearn.neighbors import KNeighborsClassifier

# 加载手写数字数据集
digits = load_digits()
X, y = digits.data, digits.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练 KNN 分类器
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

🦈回归问题:波士顿房价预测

  • 波士顿房价预测是经典的回归问题,使用线性回归模型进行演示。
python 复制代码
# 已在上文演示

🦈聚类问题:鸢尾花数据集聚类分析

  • 使用 KMeans 对鸢尾花数据集进行聚类分析。
python 复制代码
# 已在上文演示

🐋总结

  • 通过本文的介绍,我们了解了 Scikit-Learn 的基本功能和使用方法。Scikit-Learn 提供了从数据预处理、模型选择、模型训练到模型评估和调优的全流程支持,极大地简化了机器学习的实现过程。希望通过本文的学习,读者能更好地掌握 Scikit-Learn,并应用于实际的机器学习任务中。

相关推荐
ZXF_H1 小时前
pip安装github上的开源软件包
git·python·github·pip
没事别学JAVA1 小时前
使用Python编写Windows系统服务管理脚本,主要用于管理mysql、postgresql等服务
windows·python
yivifu2 小时前
用python将一个扫描pdf文件改成二值图片组成的pdf文件
python·pdf·numpy·pillow·pymupdf
Eric.Lee20213 小时前
数据集-目标检测系列- 装甲车 检测数据集 armored_vehicles >> DataBall
python·算法·yolo·目标检测·装甲车检测
Eric.Lee20213 小时前
数据集-目标检测系列- 牵牛花 检测数据集 morning_glory >> DataBall
人工智能·python·yolo·目标检测·计算机视觉·牵牛花检测
tianyunlinger4 小时前
rope编码代码分享
pytorch·python·深度学习
IT古董6 小时前
【机器学习】如何使用Python的Scikit-learn库实现机器学习模型,并对数据进行预处理和特征缩放以提高模型性能?
python·机器学习·scikit-learn
Want5957 小时前
Python绘制太极八卦
开发语言·python
翀哥~7 小时前
python VS c++
开发语言·c++·python
财富探秘者7 小时前
贵州茅台[600519]行情数据接口
大数据·c语言·python·算法·金融·restful