AI & Machine Learning精选文章8.315 分钟阅读

Python 机器学习入门指南:从 Jupyter 环境到 KNN 算法实战

全面介绍 Python 机器学习基础知识,包括 Jupyter Notebook 使用、机器学习基本概念和 KNN 算法实战案例。

作者:hero发布于 2025年1月22日

Python 机器学习入门指南:从 Jupyter 环境到 KNN 算法实战

本文将带您从零开始学习 Python 机器学习,涵盖 Jupyter Notebook 环境配置、机器学习基本概念,以及通过鸢尾花分类项目实战 KNN 算法。

🚀 Jupyter Notebook 环境配置

启动 Jupyter Notebook

# 启动 Jupyter Notebook
/Users/a1-4/Library/Python/3.9/bin/jupyter notebook

# 或者使用系统路径(如果已配置)
jupyter notebook

Jupyter 基本操作

Cell 单元格的两种模式

1. Code 模式

  • 执行 CMD 命令:!pip install numpy
  • 执行 Python 代码:直接编写 Python 代码

2. Markdown 模式

  • Markdown 标记语法
  • LaTeX 数学公式支持

快捷键操作

命令模式(ESC)

  • A:在上方添加单元格
  • B:在下方添加单元格
  • M:切换至 Markdown 模式
  • Y:切换至 Code 模式
  • DD:删除当前单元格

编辑模式(Enter)

  • Ctrl + Enter:执行当前单元格
  • Shift + Enter:执行当前单元格并移至下一行
  • Tab:代码补全
  • Ctrl + /:注释或取消注释
  • Shift + Tab:查看函数参数

在线开发环境

ModelScope 平台

  • 网址modelscope.cn
  • 配置步骤
    1. 注册账号
    2. 关联阿里云
    3. 申请免费资源
    4. 作为备用环境使用

笔记格式建议

  • 文本文件
  • Markdown 格式
  • 结构化组织

AI 编程助手推荐

  • TONGYI Lingma(阿里)
  • Baidu Comate(百度)
  • MarsCode(字节跳动)

🧠 机器学习基本概念

核心定义

基本术语

  • 算法:计算机解决问题的抽象步骤和流程
  • 模型:算法的具体代码实现

数学本质

X:样本特征(输入)
y:样本标签(输出)
目标:将 X 映射为 y,即 y = f(X)

机器学习项目流程

Step 1:项目分析

关注外部特性

  • 输入是什么?
  • 输出是什么?
  • 是分类项目还是回归项目?

Step 2:数据采集

  • 根据输入和输出构建数据集
  • 本质:数理统计问题
  • 从总体中采集样本集,用样本统计量估计总体统计量
  • 采用分层采样方法

结构化数据特点

  • 每行一个样本:独立同分布
  • 每列一个特征:相互独立
    • 离散型变量:不同状态值(如高/低)
    • 连续型变量:如长度、深度等(例如长度 10.5 米)

Step 3:数据预处理

数据清洗

  • 重复值处理
  • 缺失值处理
  • 异常值处理
  • 无效特征删除

数据切分

  • 训练集:用于训练模型
  • 测试集:用于评估模型
  • 验证集:用于调参

特征工程

  • 特征提取
  • 特征选择
  • 特征降维

Step 4:模型训练

  • 选择合适的模型
  • 进行模型训练

Step 5:模型评估

  • 分类问题的评估指标
  • 回归问题的评估指标

Step 6:模型调优

  • 调整超参数
  • 正则化
  • 交叉验证

Step 7:模型应用

  • 模型的保存和加载
  • 模型的部署和应用

🌸 KNN 算法实战:鸢尾花分类

项目分析

项目背景

鸢尾花识别(Iris Classification)

  • 项目需求:鸢尾花有 3 个子品种,通过机器学习算法进行分类预测
  • 任务:给定一朵花,让模型识别是哪个子品种

输入输出定义

输入:一朵花的数字化特征

  • 花萼长度(Sepal Length)
  • 花萼宽度(Sepal Width)
  • 花瓣长度(Petal Length)
  • 花瓣宽度(Petal Width)

输出:子品种分类

  • Setosa(山鸢尾)
  • Versicolour(变色鸢尾)
  • Virginica(维吉尼亚鸢尾)

数据采集

鸢尾花数据集特点

  • 总数据量:150 条数据
  • 特征数量:4 个特征
  • 标签数量:3 个类别
  • 数据平衡性:每个类别 50 个样本
# 加载鸢尾花数据集
from sklearn.datasets import load_iris
import pandas as pd

# 加载数据
iris = load_iris()
X = iris.data  # 特征数据
y = iris.target  # 标签数据

# 查看数据结构
print("特征名称:", iris.feature_names)
print("标签名称:", iris.target_names)
print("数据形状:", X.shape)

数据预处理

数据切分

from sklearn.model_selection import train_test_split

# 数据切分:80% 训练集,20% 测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, 
    test_size=0.2, 
    random_state=42,
    stratify=y  # 分层采样,保持类别比例
)

print(f"训练集大小: {X_train.shape[0]}")
print(f"测试集大小: {X_test.shape[0]}")

特征工程

  • 特征提取:已经提取好了(4 个数值特征)
  • 特征选择:已经选择好了(所有特征都有用)
  • 特征降维:不需要(特征数量较少)

模型训练

KNN 算法实现

from sklearn.neighbors import KNeighborsClassifier

# 创建 KNN 分类器
knn = KNeighborsClassifier(
    n_neighbors=5,  # 邻居数量
    weights='uniform',  # 权重方式
    p=2  # 距离度量(欧几里得距离)
)

# 训练模型
knn.fit(X=X_train, y=y_train)

# 进行预测
y_pred = knn.predict(X_test)

模型评估

准确率评估

from sklearn.metrics import accuracy_score, classification_report

# 计算准确率
accuracy = accuracy_score(y_true=y_test, y_pred=y_pred)
print(f"模型准确率: {accuracy:.4f}")

# 详细分类报告
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

模型调优

超参数调优

from sklearn.model_selection import GridSearchCV

# 定义参数网格
param_grid = {
    'n_neighbors': [3, 5, 7, 9, 11],
    'weights': ['uniform', 'distance'],
    'p': [1, 2]  # 1: 曼哈顿距离, 2: 欧几里得距离
}

# 网格搜索
grid_search = GridSearchCV(
    KNeighborsClassifier(),
    param_grid,
    cv=5,  # 5 折交叉验证
    scoring='accuracy'
)

# 执行搜索
grid_search.fit(X_train, y_train)

# 最佳参数
print("最佳参数:", grid_search.best_params_)
print("最佳得分:", grid_search.best_score_)

模型应用

模型保存和加载

import joblib

# 保存模型
joblib.dump(value=knn, filename="knn_model.pkl")

# 加载模型
loaded_model = joblib.load(filename="knn_model.pkl")

实际预测应用

def predict_iris_species(sepal_length, sepal_width, petal_length, petal_width):
    """预测鸢尾花品种"""
    input_data = [[sepal_length, sepal_width, petal_length, petal_width]]
    prediction = loaded_model.predict(input_data)
    species_name = iris.target_names[prediction[0]]
    return species_name

# 示例预测
result = predict_iris_species(5.1, 3.5, 1.4, 0.2)
print(f"预测品种: {result}")

🎯 学习总结

关键知识点

  1. Jupyter Notebook:数据科学的标准开发环境
  2. 机器学习流程:从问题分析到模型部署的完整流程
  3. KNN 算法:简单而有效的分类算法
  4. 模型评估:准确率、分类报告等评估指标
  5. 超参数调优:网格搜索和交叉验证

实践技能

  • Jupyter Notebook 熟练使用
  • scikit-learn 库的基本操作
  • 数据预处理和特征工程
  • 模型训练、评估和调优
  • 模型保存和部署

下一步学习建议

  1. 学习更多机器学习算法(决策树、随机森林、SVM 等)
  2. 深入理解特征工程和数据预处理
  3. 学习深度学习基础知识
  4. 实践更复杂的数据科学项目

通过本文的学习,您已经掌握了 Python 机器学习的基础知识和实战技能。继续练习和探索,您将在数据科学的道路上越走越远!🚀

相关文章

AI & Machine Learning13.94 分钟

LLM 大语言模型学习路径完全指南:从入门到实战

全面的大语言模型学习路径,涵盖基础理论、技术栈、实战项目和职业发展,帮助开发者系统性掌握 LLM 技术。

觉得这篇文章有用?

分享给更多朋友,让知识传播得更远 ✨

评论讨论

参与讨论

登录后即可发表评论,与其他读者交流想法

加载评论中...