【30天玩转python】机器学习入门
机器学习入门
机器学习(Machine Learning, ML)是一种使计算机能够在没有显式编程的情况下自动改进的技术。它广泛应用于分类、回归、图像处理、自然语言处理等领域。通过数据训练模型,机器可以从经验中学习,并预测或决定新的数据结果。本篇文章将介绍机器学习的基础知识和如何用 Python 实现简单的机器学习算法。
1. 机器学习的分类
根据学习的方式,机器学习通常分为以下几类:
- 监督学习:训练数据由输入和对应的目标值组成,模型通过学习这些数据来预测新的输入结果。
- 常见算法:线性回归、决策树、支持向量机(SVM)、神经网络等。
- 无监督学习:没有明确的目标值,模型需要从数据中发现规律或结构。
- 常见算法:聚类(K-Means)、降维(PCA)等。
- 强化学习:通过与环境交互,模型学习如何通过一系列的动作来最大化奖励。
- 常见算法:Q-learning、深度强化学习等。
2. 机器学习的基本流程
机器学习项目通常包括以下几个步骤:
- 数据收集:获取相关数据,可以通过公开数据集、API 或数据库获取。
- 数据预处理:清洗数据、处理缺失值、标准化等。
- 模型选择:根据任务选择合适的机器学习算法。
- 训练模型:使用训练数据对模型进行训练。
- 模型评估:使用测试数据评估模型的性能。
- 调优模型:通过调参或选择更复杂的模型提升模型性能。
3. Python 机器学习库
Python 提供了丰富的机器学习库,使得算法实现变得简单。常用库包括:
- NumPy:用于处理多维数组和矩阵。
- Pandas:提供高效的数据操作工具。
- Matplotlib 和 Seaborn:用于数据可视化。
- Scikit-learn:提供了多种经典的机器学习算法。
- TensorFlow 和 PyTorch:深度学习框架。
4. 线性回归示例
线性回归是一种常见的监督学习算法,用于预测连续值。它通过找到数据点之间的最佳拟合直线来做出预测。
4.1 导入库并准备数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression# 生成示例数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)# 可视化数据
plt.scatter(X, y)
plt.xlabel('X')
plt.ylabel('y')
plt.title('生成的线性数据')
plt.show()
4.2 训练模型
# 划分训练集和测试集
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)# 输出模型的参数
print(f'截距: {model.intercept_}')
print(f'系数: {model.coef_}')
4.3 模型评估
# 预测测试集
y_pred = model.predict(X_test)# 可视化预测结果
plt.scatter(X_test, y_test, color='blue', label='实际值')
plt.plot(X_test, y_pred, color='red', label='预测值')
plt.xlabel('X')
plt.ylabel('y')
plt.title('线性回归预测')
plt.legend()
plt.show()
5. 分类问题示例:K-近邻(KNN)
K-近邻(KNN)算法是一个简单的分类算法,它通过计算距离,将输入数据分类到与它距离最近的类别中。
5.1 导入数据集
Scikit-learn 提供了多个内置数据集,可以直接使用 datasets
模块导入。这里我们使用著名的鸢尾花(Iris)数据集。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score# 加载数据集
iris = load_iris()
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)
5.2 训练 KNN 模型
# 创建并训练 KNN 分类器
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)# 预测测试集
y_pred = knn.predict(X_test)# 输出准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'模型准确率: {accuracy * 100:.2f}%')
5.3 可视化结果
# 可视化预测结果(简化为二维展示)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, marker='o', label='预测结果')
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, marker='x', label='真实类别')
plt.xlabel('花萼长度')
plt.ylabel('花萼宽度')
plt.legend()
plt.title('KNN 分类结果')
plt.show()
6. 交叉验证与模型调优
为了防止模型在训练过程中过拟合,可以使用交叉验证(Cross-Validation)技术。交叉验证通过将数据集分为多个子集,进行多次训练和测试,保证模型的泛化能力。
6.1 使用交叉验证评估模型
from sklearn.model_selection import cross_val_score# 使用交叉验证评估模型
scores = cross_val_score(knn, X, y, cv=5)
print(f'交叉验证平均准确率: {np.mean(scores) * 100:.2f}%')
6.2 模型调优
通过调整超参数,可以进一步提升模型的性能。例如,KNN 模型的超参数是 K 值,表示最近邻的数量。我们可以通过网格搜索(Grid Search)来找到最优的 K 值。
from sklearn.model_selection import GridSearchCV# 定义参数范围
param_grid = {'n_neighbors': np.arange(1, 10)}# 网格搜索寻找最优参数
grid_search = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)# 输出最优参数
print(f'最优 K 值: {grid_search.best_params_}')
7. 小结
机器学习是一个不断发展的领域,利用 Python 的丰富库和工具,可以轻松实现从基础到高级的机器学习算法。本文介绍了机器学习的基本概念、流程和两种常见的算法——线性回归和 K 近邻分类。在实际项目中,还可以利用更多的工具和算法,深入挖掘数据的潜在价值。