通往 AI 之路:Python 机器学习入门-机器学习基本概念

机器学习基本概念

机器学习是人工智能的重要分支,它依赖数学和统计学方法来构建模型,处理和分析数据。本章介绍了机器学习的基本概念,包括监督学习与无监督学习的区别,数据集的划分方式,过拟合与欠拟合的问题,以及交叉验证的方法。这些基础知识对理解和应用机器学习至关重要。


1. 监督学习 vs 无监督学习

1.1 监督学习

监督学习(Supervised Learning)是一种学习方法,它使用带有标签的数据进行训练,使模型能够学习输入与输出之间的映射关系。

监督学习的常见算法:
  • 线性回归(Linear Regression)
  • 逻辑回归(Logistic Regression)
  • 支持向量机(SVM)
  • 决策树(Decision Tree)
  • 随机森林(Random Forest)
  • 神经网络(Neural Networks)
示例:使用 Scikit-learn 进行监督学习
python 复制代码
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import numpy as np

# 生成数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])

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

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

# 预测
predictions = model.predict(X_test)
print("预测值:", predictions)

1.2 无监督学习

无监督学习(Unsupervised Learning)是指没有标签的数据,模型需要自己发现数据中的模式或结构。

无监督学习的常见算法:
  • 聚类(Clustering):K-Means、DBSCAN、层次聚类
  • 降维(Dimensionality Reduction):PCA、t-SNE、LDA
示例:使用 K-Means 进行聚类
python 复制代码
from sklearn.cluster import KMeans
import numpy as np

# 生成数据
X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])

# K-Means 聚类
kmeans = KMeans(n_clusters=2, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_
print("聚类标签:", labels)

2. 训练集、测试集、验证集

在机器学习任务中,我们通常将数据集划分为:

  • 训练集(Training Set):用于训练模型
  • 验证集(Validation Set):用于调整超参数
  • 测试集(Test Set):用于评估最终模型性能
python 复制代码
from sklearn.model_selection import train_test_split
import numpy as np

# 生成数据
X = np.arange(1, 101).reshape(-1, 1)
y = np.arange(1, 101)

# 划分训练集(60%)、验证集(20%)、测试集(20%)
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)

3. 过拟合与欠拟合

3.1 过拟合(Overfitting)

  • 训练集上的表现很好,但测试集上的表现很差。
  • 解决方案:使用正则化(L1/L2)、增加数据量、降低模型复杂度。

3.2 欠拟合(Underfitting)

  • 模型过于简单,无法捕捉数据中的模式。
  • 解决方案:增加模型复杂度、增加特征、使用更强的算法。
python 复制代码
from sklearn.linear_model import Ridge

# 使用 L2 正则化(Ridge 回归)
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)

4. 交叉验证(Cross Validation)

交叉验证是一种评估模型性能的技术,可以减少模型对训练数据的依赖,提高泛化能力。

4.1 K 折交叉验证(K-Fold Cross Validation)

将数据集分成 K 份,轮流使用其中 K-1 份训练,1 份测试。

python 复制代码
from sklearn.model_selection import KFold, cross_val_score
from sklearn.linear_model import LinearRegression

kf = KFold(n_splits=5)
model = LinearRegression()
scores = cross_val_score(model, X, y, cv=kf)
print("K 折交叉验证得分:", scores)

4.2 分层 K 折交叉验证(Stratified K-Fold)

适用于类别不均衡数据。

python 复制代码
from sklearn.model_selection import StratifiedKFold
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
skf = StratifiedKFold(n_splits=5)

4.3 留一法(LOO,Leave-One-Out)

每次使用 n-1 个样本训练,剩下 1 个样本测试。

python 复制代码
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
scores = cross_val_score(model, X, y, cv=loo)
print("LOO 交叉验证得分:", scores.mean())

4.4 随机分割交叉验证(Shuffle Split)

适用于大数据集,减少计算量。

python 复制代码
from sklearn.model_selection import ShuffleSplit
ss = ShuffleSplit(n_splits=5, test_size=0.2, random_state=42)
scores = cross_val_score(model, X, y, cv=ss)

4.5 时间序列交叉验证

适用于时间序列数据,不能随机分割。

python 复制代码
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=3)
scores = cross_val_score(model, X, y, cv=tscv)

结论

本章介绍了机器学习的基本概念,包括监督学习与无监督学习、数据集划分、过拟合与欠拟合以及交叉验证方法。理解这些基础知识可以帮助我们更好地训练和优化机器学习模型。

相关推荐
jarreyer几秒前
数据项目分析标准化流程
开发语言·python·机器学习
乾元2 分钟前
如何把 CCIE / HCIE 的实验案例改造成 AI 驱动的工程项目——从“实验室能力”到“可交付系统”的完整迁移路径
大数据·运维·网络·人工智能·深度学习·安全·机器学习
GZKPeng3 分钟前
pytorch +cuda成功安装后, torch.cuda.is_available 是False
人工智能·pytorch·python
我的xiaodoujiao4 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 39--生成 Allure测试报告
python·学习·测试工具·pytest
Coder_Boy_4 分钟前
Spring Boot 事务回滚异常 UnexpectedRollbackException 详解(常见问题集合)
java·spring boot·后端
QiZhang | UESTC4 分钟前
学习日记day53
学习
风象南6 分钟前
SpringBoot 实现网络限速
后端
qq_571099356 分钟前
学习周报三十
学习
QBoson6 分钟前
量子机器学习用于药物发现:系统综述
人工智能·机器学习·量子计算
DatGuy6 分钟前
Week 32: 深度学习补遗:Agent的认知架构、记忆系统与高阶规划
人工智能·深度学习