当前位置: 首页 > news >正文

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 进行机器学习时,整个过程一般遵循以下步骤:

  1. 导入必要的库 - 例如,NumPy、Pandas 和 Scikit-learn。

  2. 加载和准备数据 - 数据是机器学习的核心。你需要加载数据并进行必要的预处理(例如数据清洗、缺失值填补等)。

  3. 选择模型和算法 - 根据任务选择适合的机器学习算法(如线性回归、决策树等)。

  4. 训练模型 - 使用训练集数据来训练模型。

  5. 评估模型 - 使用测试集评估模型的准确性,并根据评估结果优化模型。

  6. 调整模型和超参数 - 根据评估结果调整模型的超参数,进一步优化模型性能。

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勾选。


http://www.mrgr.cn/news/83422.html

相关文章:

  • 高级系统架构师--第二章:软件工程
  • 迅雷下载的原理和使用协议的分析
  • 深度优先搜索(DFS)——八皇后问题与全排列问题
  • R语言LCMM多维度潜在类别模型流行病学研究:LCA、MM方法分析纵向数据
  • 35~37.ppt
  • 【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统
  • fisco bcos CRUD编写合约的注意点
  • 【应用篇】09.自主Shell命令行解释器
  • mysql中创建计算字段
  • 音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流
  • ollama简单上手
  • 【C语言】_使用冒泡排序模拟实现qsort函数
  • java_将数据存入elasticsearch进行高效搜索
  • Vue Router4
  • Flask----前后端不分离-登录
  • 【算法与数据结构】—— 回文问题
  • 有心力场的两体问题
  • 修改之前的代码使得利用设备树文件和Platform总线设备驱动实现对多个LED的驱动【只是假想对LED进行驱动,并没有实际的硬件操作】
  • 大模型WebUI:Gradio全解11——Chatbots:融合大模型的多模态聊天机器人(2)
  • android四大组件之一——Service
  • 探索 C++ Insights: 理解编译器背后的 C++ 实现
  • 树的模拟实现
  • python 个人学习笔记
  • RabbitMQ基础(简单易懂)
  • day06_Spark SQL
  • 【源码解析】Java NIO 包中的 ByteBuffer