共计 3004 个字符,预计需要花费 8 分钟才能阅读完成。
欢迎来到 Python 基础入门 Day31!今天,我们将学习 机器学习基础,通过使用 Python 中的 scikit-learn 库来进行数据预处理、模型训练、评估与预测。机器学习是数据科学中最重要的部分之一,掌握它将使你能够处理更复杂的任务。
目录
- 机器学习简介
- 数据预处理与特征工程
- 训练机器学习模型
- 模型评估与优化
- 小结与练习
一、机器学习简介
机器学习(Machine Learning)是指计算机通过数据来学习并做出预测或决策的一种技术。机器学习的基本流程如下:
- 数据收集:获取原始数据。
- 数据预处理:清洗和转换数据,使其适合于模型训练。
- 特征选择与工程:选择相关的特征,并对数据进行适当的变换。
- 模型训练:使用算法对数据进行训练,生成预测模型。
- 模型评估:评估模型的表现,进行优化。
- 预测与部署:使用模型进行预测,并将其应用到实际问题中。
今天,我们将重点学习 scikit-learn,它是 Python 中最常用的机器学习库之一,提供了许多工具来处理数据、训练模型以及进行评估。
二、数据预处理与特征工程
在机器学习中,数据预处理和特征工程是非常重要的一步。清理数据和生成有效的特征可以显著提高模型的表现。
2.1 加载数据集
我们将使用 scikit-learn 提供的示例数据集进行演示。在这里,我们以鸢尾花数据集(iris)为例:
from sklearn import datasets
import pandas as pd
# 加载鸢尾花数据集
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df["target"] = iris.target
print(df.head())
2.2 处理缺失值
机器学习模型对缺失数据很敏感,我们通常需要填补或删除缺失值。
# 检查缺失值
print(df.isnull().sum())
# 填充缺失值(假设我们填充为均值)df.fillna(df.mean(), inplace=True)
2.3 特征标准化
不同特征的量纲可能不同,为了提高模型的表现,我们通常对数据进行标准化,使其具有相同的量纲。
from sklearn.preprocessing import StandardScaler
# 特征标准化
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df.drop("target", axis=1))
三、训练机器学习模型
在机器学习中,选择合适的模型是至关重要的一步。今天,我们将使用 逻辑回归(Logistic Regression) 模型进行分类任务。
3.1 划分训练集与测试集
为了评估模型的效果,我们需要将数据集划分为训练集和测试集。通常,80% 的数据用于训练,20% 的数据用于测试。
from sklearn.model_selection import train_test_split
# 划分数据集,80% 用于训练,20% 用于测试
X_train, X_test, y_train, y_test = train_test_split(df_scaled, df["target"], test_size=0.2, random_state=42)
3.2 训练模型
我们将使用 逻辑回归 模型来训练数据。
from sklearn.linear_model import LogisticRegression
# 创建并训练模型
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
3.3 预测与评估
训练完成后,我们可以使用测试集来评估模型的效果。
# 使用模型进行预测
y_pred = model.predict(X_test)
# 评估模型的准确性
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print(f"Model Accuracy: {accuracy * 100:.2f}%")
四、模型评估与优化
4.1 混淆矩阵
混淆矩阵用于评估分类模型的效果,能够展示模型预测的真实情况。
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
# 绘制热图
sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="Blues", xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()
4.2 调整超参数
为了优化模型的性能,我们可以调整超参数。例如,逻辑回归模型有多个超参数可以调整,使用 GridSearchCV 可以帮助我们找到最佳的超参数组合。
from sklearn.model_selection import GridSearchCV
# 设置参数范围
param_grid = {"C": [0.1, 1, 10, 100]}
# 使用 GridSearchCV 查找最佳参数
grid_search = GridSearchCV(LogisticRegression(max_iter=200), param_grid, cv=5)
grid_search.fit(X_train, y_train)
# 输出最佳参数
print(f"Best Parameters: {grid_search.best_params_}")
4.3 交叉验证
交叉验证可以帮助我们评估模型在不同数据集上的表现,避免过拟合。
from sklearn.model_selection import cross_val_score
# 使用交叉验证评估模型
scores = cross_val_score(model, X_train, y_train, cv=5)
print(f"Cross-validation scores: {scores}")
print(f"Mean cross-validation score: {scores.mean()}")
五、小结与练习
今日总结:
- 学习了机器学习的基本流程,包括数据预处理、模型训练、评估与优化。
- 使用 scikit-learn 进行了数据预处理、训练逻辑回归模型,并评估了模型性能。
- 介绍了如何使用混淆矩阵、超参数优化和交叉验证来提高模型的效果。
今日练习:
- 使用 scikit-learn 的鸢尾花数据集,训练 K-Nearest Neighbors(KNN) 模型并评估其准确性。
- 调整 KNN 模型的 k 值,并使用 GridSearchCV 寻找最佳参数。
- 使用其他分类模型(如决策树、支持向量机等),并比较不同模型的表现。
- 使用 cross_val_score 评估模型在不同数据集上的表现。
下一节预告 :在 Day32 中,我们将学习 回归分析 ,并使用 线性回归 模型进行预测任务。敬请期待!
今天的学习就到这里,祝你在机器学习的世界中继续探索与成长!如果有任何问题或疑问,欢迎随时讨论 😊。