【30天玩转python】机器学习入门

机器学习入门

机器学习(Machine Learning, ML)是一种使计算机能够在没有显式编程的情况下自动改进的技术。它广泛应用于分类、回归、图像处理、自然语言处理等领域。通过数据训练模型,机器可以从经验中学习,并预测或决定新的数据结果。本篇文章将介绍机器学习的基础知识和如何用 Python 实现简单的机器学习算法。


1. 机器学习的分类

根据学习的方式,机器学习通常分为以下几类:

  1. 监督学习:训练数据由输入和对应的目标值组成,模型通过学习这些数据来预测新的输入结果。
    • 常见算法:线性回归、决策树、支持向量机(SVM)、神经网络等。
  2. 无监督学习:没有明确的目标值,模型需要从数据中发现规律或结构。
    • 常见算法:聚类(K-Means)、降维(PCA)等。
  3. 强化学习:通过与环境交互,模型学习如何通过一系列的动作来最大化奖励。
    • 常见算法:Q-learning、深度强化学习等。

2. 机器学习的基本流程

机器学习项目通常包括以下几个步骤:

  1. 数据收集:获取相关数据,可以通过公开数据集、API 或数据库获取。
  2. 数据预处理:清洗数据、处理缺失值、标准化等。
  3. 模型选择:根据任务选择合适的机器学习算法。
  4. 训练模型:使用训练数据对模型进行训练。
  5. 模型评估:使用测试数据评估模型的性能。
  6. 调优模型:通过调参或选择更复杂的模型提升模型性能。

3. Python 机器学习库

Python 提供了丰富的机器学习库,使得算法实现变得简单。常用库包括:

  • NumPy:用于处理多维数组和矩阵。
  • Pandas:提供高效的数据操作工具。
  • MatplotlibSeaborn:用于数据可视化。
  • Scikit-learn:提供了多种经典的机器学习算法。
  • TensorFlowPyTorch:深度学习框架。

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 近邻分类。在实际项目中,还可以利用更多的工具和算法,深入挖掘数据的潜在价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱技术的小伙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值