AI人工智能(3):Python 入门机器学习
1 安装必要库
Python 是机器学习中最常用的编程语言之一,因其易于学习、强大的库支持和社区生态系统。接下来,我将逐步说明如何通过 Python 入门机器学习,并介绍需要的一些常用库。
首先,确保你已经安装了 Python,你可以访问Python 官方网站 https://www.python.org/ 下载和安装最新版本。如果你还不熟悉 Python,可以先看之前的python入门教程python_游王子og的博客-CSDN博客。
常用机器学习库:
pip install numpy pandas matplotlib seaborn scikit-learn
如果你打算使用深度学习框架,安装如下:
pip install torch # 或者
pip install tensorflow
在使用 Python 进行机器学习时,整个过程一般遵循以下步骤:
-
导入必要的库 - 例如,NumPy、Pandas 和 Scikit-learn。
-
加载和准备数据 - 数据是机器学习的核心。你需要加载数据并进行必要的预处理(例如数据清洗、缺失值填补等)。
-
选择模型和算法 - 根据任务选择适合的机器学习算法(如线性回归、决策树等)。
-
训练模型 - 使用训练集数据来训练模型。
-
评估模型 - 使用测试集评估模型的准确性,并根据评估结果优化模型。
-
调整模型和超参数 - 根据评估结果调整模型的超参数,进一步优化模型性能。
2 一个简单的机器学习例子:使用 Scikit-learn 做分类
Scikit-learn(简称 Sklearn)是一个开源的机器学习库,建立在 NumPy、SciPy 和 matplotlib 这些科学计算库之上,提供了简单高效的数据挖掘和数据分析工具。Scikit-learn 包含了许多常见的机器学习算法,包括:
- 线性回归、岭回归、Lasso回归
- 支持向量机(SVM)
- 决策树、随机森林、梯度提升树
- 聚类算法(如K-Means、层次聚类、DBSCAN)
- 降维技术(如PCA、t-SNE)
- 神经网络
接下来我们通过一个简单的分类任务——使用鸢尾花数据集(Iris Dataset)来演示机器学习的流程,鸢尾花数据集是一个经典的数据集,包含 150 个样本,描述了三种不同类型的鸢尾花的花瓣和萼片的长度和宽度。
2.1 导入库
import pandas as pd # 数据分析库
import matplotlib.pyplot as plt # 数据可视化库
from sklearn.datasets import load_iris # 导入鸢尾花数据集
from sklearn.model_selection import train_test_split # 导入数据集拆分工具
from sklearn.preprocessing import StandardScaler # 导入数据标准化工具
from sklearn.neighbors import KNeighborsClassifier # 导入 KNN 分类器
from sklearn.metrics import accuracy_score # 导入准确率计算工具
2.2 加载数据
加载鸢尾花数据集:
# 加载鸢尾花数据集
iris = load_iris()
''' 将数据转化为 pandas DataFrame(表格结构)iris.data 特征数据,一个二维数组类似于 [[1,2,3,4],[2,3,4,5],[3,4,5,6] ... ]iris.feature_names 特征名称,一个一维数组这里值为['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']iris.target 标签数据,一个一维数组这里值为[0,0,0...1,1,1...2,2,2...]iris.target_names 标签名称,一个一维数组这里值为['setosa', 'versicolor', 'virginica'] 三种花的品种
'''
X = pd.DataFrame(iris.data, columns=iris.feature_names) # 特征数据
y = pd.Series(iris.target) # 标签数据# 显示转换后数据
print(X)
2.3 数据集划分
将数据集划分为训练集和测试集:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
变量 | 描述 |
---|---|
X_train | 划分的训练集数据 |
X_test | 划分的测试集数据 |
y_train | 划分的训练集标签 |
y_test | 划分的测试集标签 |
参数 | 描述 |
---|---|
train_data | 还未划分的数据集 |
train_target | 还未划分的标签 |
test_size | 分割比例,默认为0.25,即测试集占完整数据集的比例 |
random_state | 随机数种子,应用于分割前对数据的洗牌。可以是int,RandomState实例或None,默认值=None。设成定值意味着,对于同一个数据集,只有第一次运行是随机的,随后多次分割只要rondom_state相同,则划分结果也相同。 |
shuffle | 是否在分割前对完整数据进行洗牌(打乱),默认为True,打乱 |
2.4 特征缩放(标准化)
许多机器学习算法都依赖于特征的尺度,特别是像 K 最近邻算法。为了确保每个特征的均值为 0,标准差为 1,我们使用标准化来处理数据:
'''数据预处理 StandardScaler去均值和方差归一化。且是针对每一个特征维度来做的,而不是针对样本。 标准差标准化使得经过处理的数据符合标准正态分布,即均值为0,标准差为1。
'''
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
处理后数据:
2.5 选择模型并训练
在这个例子中,我们选择 K-Nearest Neighbors(KNN) 算法来进行分类:
'''创建 KNN 分类器KNeighborsClassifier 是 scikit-learn 库中 K-近邻算法的实现,用于分类任务。KNN 算法的基本思想是给定一个样本数据集,对于每个输入的新数据点,找到其在样本数据集中最近的 K 个数据点,根据这 K 个邻居的类别来预测新数据点的类别。
'''
knn = KNeighborsClassifier(n_neighbors=3)
# 训练模型
knn.fit(X_train, y_train)
2.6 评估模型
训练完成后,我们使用测试集评估模型的准确性:
# 预测测试集
y_pred = knn.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'测试数据标签:{y_test.values}')
print(f'算法预测标签:{y_pred}')
print(f'模型准确率: {accuracy:.2f}')
2.7 可视化结果(可选)
你可以通过可视化来进一步了解模型的表现,尤其是在多维数据集的情况下。例如,你可以用二维图来显示 KNN 分类的结果。
# 可视化 - 这里只是一个简单示例,具体可根据实际情况选择绘图方式
# 设置中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
'''
X_test[:, 0] 和 X_test[:, 1] 分别表示测试数据集X_test中的第一列和第二列数据,作为散点图的x坐标和y坐标。
c=y_pred 表示散点的颜色由预测值y_pred决定。
cmap='viridis' 指定了颜色映射为viridis,这是一种连续的颜色映射。
marker='o' 指定了散点的形状为圆形。
'''
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, cmap='viridis', marker='o')
plt.title("KNN 分类结果")
plt.xlabel("花萼长度")
plt.ylabel("花萼宽度")
plt.show()
注意:idea中如果在右上角使用插件显示会存在bug,解决办法是取消掉Show plots in tool window勾选。