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
- 配置步骤:
- 注册账号
- 关联阿里云
- 申请免费资源
- 作为备用环境使用
笔记格式建议
- 文本文件
- 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}")
🎯 学习总结
关键知识点
- Jupyter Notebook:数据科学的标准开发环境
- 机器学习流程:从问题分析到模型部署的完整流程
- KNN 算法:简单而有效的分类算法
- 模型评估:准确率、分类报告等评估指标
- 超参数调优:网格搜索和交叉验证
实践技能
- Jupyter Notebook 熟练使用
- scikit-learn 库的基本操作
- 数据预处理和特征工程
- 模型训练、评估和调优
- 模型保存和部署
下一步学习建议
- 学习更多机器学习算法(决策树、随机森林、SVM 等)
- 深入理解特征工程和数据预处理
- 学习深度学习基础知识
- 实践更复杂的数据科学项目
通过本文的学习,您已经掌握了 Python 机器学习的基础知识和实战技能。继续练习和探索,您将在数据科学的道路上越走越远!🚀