当前位置:  首页>> 技术小册>> Python机器学习实战

第三章:监督学习基础

在探索Python机器学习实战的广阔领域中,监督学习无疑是最基础且应用最为广泛的学习范式之一。本章将深入解析监督学习的基本原理、核心概念、常用算法以及如何通过Python实现这些算法。通过本章的学习,读者将掌握监督学习的基本框架,为后续复杂模型的学习与应用打下坚实基础。

3.1 监督学习概述

定义与特点

监督学习(Supervised Learning)是机器学习中的一种重要学习方式,其特点在于训练数据集中每个样本都包含输入特征(features)和对应的输出标签(labels)或目标值(target values)。模型通过学习这些样本,试图找到输入特征与输出标签之间的映射关系,进而对新的、未见过的样本进行预测。

应用场景

监督学习广泛应用于各种领域,包括但不限于:

  • 分类:将输入数据分为预定义的类别,如垃圾邮件识别、图像分类。
  • 回归:预测连续值输出,如房价预测、股票价格预测。
  • 序列预测:根据历史数据预测未来序列中的值,如时间序列分析、自然语言处理中的语言模型。

3.2 监督学习的基本流程

监督学习的基本流程可以分为以下几个步骤:

  1. 数据收集:获取包含输入特征和输出标签的数据集。
  2. 数据预处理:包括数据清洗(处理缺失值、异常值)、特征选择、特征缩放等,以提高模型性能。
  3. 模型选择:根据问题类型(分类、回归等)选择合适的机器学习算法。
  4. 模型训练:使用训练数据集训练模型,找到最佳参数组合。
  5. 模型评估:通过测试数据集评估模型性能,常用的评估指标包括准确率、召回率、F1分数(分类问题)、均方误差(MSE)、均方根误差(RMSE)等(回归问题)。
  6. 模型调优:根据评估结果调整模型参数或选择不同模型,以提高性能。
  7. 模型部署:将训练好的模型部署到实际应用中,进行预测或决策支持。

3.3 经典监督学习算法

3.3.1 线性回归

线性回归是回归问题中最简单的模型之一,它假设输入特征与输出标签之间存在线性关系。通过最小二乘法求解线性方程的参数,使得预测值与真实值之间的误差平方和最小。

Python实现

  1. from sklearn.linear_model import LinearRegression
  2. from sklearn.model_selection import train_test_split
  3. from sklearn.datasets import load_boston
  4. # 加载波士顿房价数据集
  5. X, y = load_boston(return_X_y=True)
  6. # 划分训练集和测试集
  7. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  8. # 初始化线性回归模型
  9. model = LinearRegression()
  10. # 训练模型
  11. model.fit(X_train, y_train)
  12. # 预测测试集
  13. y_pred = model.predict(X_test)
  14. # 评估模型(这里以均方误差为例)
  15. from sklearn.metrics import mean_squared_error
  16. mse = mean_squared_error(y_test, y_pred)
  17. print("Mean Squared Error:", mse)
3.3.2 逻辑回归

虽然名为“回归”,但逻辑回归实际上是一种用于分类问题的算法,特别是二分类问题。它通过Sigmoid函数将线性回归的输出映射到(0,1)区间,表示属于某个类别的概率。

Python实现(以二分类为例):

  1. from sklearn.linear_model import LogisticRegression
  2. from sklearn.datasets import load_iris
  3. # 加载鸢尾花数据集,这里仅使用两个类别作为二分类示例
  4. X, y = load_iris(return_X_y=True)
  5. X = X[y != 2] # 只保留类别0和1
  6. y = y[y != 2]
  7. # 划分训练集和测试集
  8. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  9. # 初始化逻辑回归模型
  10. model = LogisticRegression(max_iter=200) # 增加迭代次数以确保收敛
  11. # 训练模型
  12. model.fit(X_train, y_train)
  13. # 预测测试集
  14. y_pred = model.predict(X_test)
  15. # 评估模型(准确率)
  16. from sklearn.metrics import accuracy_score
  17. accuracy = accuracy_score(y_test, y_pred)
  18. print("Accuracy:", accuracy)
3.3.3 支持向量机(SVM)

支持向量机是一种强大的分类算法,其目标是找到一个超平面,将不同类别的样本分隔开,并尽可能使各类样本到该超平面的距离最大化(即间隔最大化)。

Python实现

  1. from sklearn.svm import SVC
  2. # 假设已有X_train, X_test, y_train, y_test(使用前面的划分)
  3. # 初始化SVM模型,这里使用RBF核
  4. model = SVC(kernel='rbf', gamma='auto')
  5. # 训练模型
  6. model.fit(X_train, y_train)
  7. # 预测测试集
  8. y_pred = model.predict(X_test)
  9. # 评估模型(准确率)
  10. accuracy = accuracy_score(y_test, y_pred)
  11. print("Accuracy:", accuracy)

3.4 模型选择与调优

在实际应用中,选择合适的模型并对其进行调优是提高模型性能的关键。这通常涉及以下几个方面:

  • 交叉验证:使用交叉验证来评估模型在不同训练集上的表现,以减少过拟合风险。
  • 参数调优:通过网格搜索(Grid Search)、随机搜索(Random Search)等方法找到最优参数组合。
  • 集成学习:利用多个模型的预测结果来提高整体性能,如随机森林、梯度提升树等。

3.5 小结

本章介绍了监督学习的基本概念、流程、经典算法及其在Python中的实现。通过理论讲解与实例演示相结合的方式,使读者能够深入理解监督学习的核心思想,并掌握使用Python进行机器学习项目的基本技能。在后续章节中,我们将进一步探索更复杂的模型和高级技术,如深度学习、无监督学习等,以应对更加复杂多变的数据分析和预测任务。