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

《零基础入门AI:传统机器学习入门(从理论到Scikit-Learn实践)》

一、机器学习介绍

1. 定义
机器学习(ML)是人工智能的分支,核心是让计算机从数据中自动学习规律,并根据所得到的规律对未来数据进行预测,而非显式编程。例如:通过历史房价数据预测新房价,系统自动学习“面积-位置-价格”的关系。

2. 发展简史

  • 1950s:图灵提出“学习机器”概念
  • 1980s:决策树、反向传播算法诞生
  • 1990s:支持向量机(SVM)兴起
  • 2000s:集成方法(如随机森林)突破
  • 2010s:深度学习爆发,但传统ML仍主导结构化数据处理

3. 分类

类型特点典型算法
监督学习有标注数据线性回归、KNN、SVM
无监督学习无标注数据K-Means、PCA
半监督学习部分标注数据标签传播算法
强化学习通过奖励机制学习Q-Learning

4. 必备基础知识

  • 数学:线性代数(矩阵运算)、概率论(贝叶斯定理)、微积分(梯度计算)

  • 编程:Python基础 + NumPy/Pandas库

  • 学习路径

    Python基础
    NumPy/Pandas
    Matplotlib可视化
    Scikit-Learn实战

5. 应用场景

  • 金融:信用评分
  • 医疗:疾病预测
  • 零售:推荐系统
  • 工业:设备故障检测

6. 趋势分析
传统ML优势:小数据高效训练模型可解释性强(如决策树规则),与深度学习形成互补。

7. 项目开发流程

1. 问题定义 → 2. 数据收集 → 3. 数据清洗 → 4. 特征工程 → 5. 模型训练 → 6. 模型评估 → 7. 部署应用

二、Scikit-Learn工具详解

Scikit-Learn:Python最流行的机器学习库,提供统一API接口,涵盖完整机器学习工作流。

**1. 安装与验证 **:

pip install scikit-learn  # 需预先安装NumPy和SciPy
import sklearn
print(sklearn.__version__)  # 输出:1.4.0

2. 核心模块

模块功能
sklearn.datasets数据集加载
sklearn.preprocessing数据预处理
sklearn.feature_extraction特征提取
sklearn.model_selection模型选择与验证
sklearn.metrics评估指标

三、数据集详解

1. 玩具数据集(内置示例)

  • 鸢尾花数据集(load_iris):150朵花,4个特征(花瓣长宽)
  • 手写数字(load_digits):8x8像素的0-9数字图片

2. 现实世界数据集

  • 房价预测(fetch_california_housing):20,640条房屋数据
  • 新闻分类(fetch_20newsgroups):18,000篇新闻文本

3. 数据加载示例

from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target  # X是特征矩阵,y是标签向量

4. 本地CSV数据加载

import pandas as pd
df = pd.read_csv('data.csv')
X = df[['feature1', 'feature2']]  # 选择特征列
y = df['target']                  # 目标列

5. 数据集划分

数据划分原理
https://scikit-learn.org/stable/_images/grid_search_cross_validation.png

为什么划分? 防止模型“死记硬背”训练数据(过拟合)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)  # 80%训练,20%测试

四、特征工程:数据到模型的桥梁

1. 概念
特征工程是将原始数据转换为更能表达问题本质的特征的过程,是提升模型性能的关键。类比烹饪:食材(原始数据)→ 切配调味(特征工程)→ 更易烹制(模型训练)。

2. 关键API与原理
(1)字典特征提取(DictVectorizer

  • 原理:将分类特征转换为数值矩阵

  • 场景:处理类别型特征(如“城市”=[“北京”,“上海”])

  • 独热编码(One-Hot)原理
    将分类变量转换为二进制向量:

原始数据:
[{'城市': '北京', '温度': 25}, {'城市': '上海', '温度': 30}]转换后:
[[1, 0, 25],  # 北京 → [1,0][0, 1, 30]]  # 上海 → [0,1]

(2)文本特征提取

  • 词频统计(CountVectorizer
    将文本转换为词频矩阵

  • 处理流程

    1. 分词:[“我”,“爱”,“机器学习”]
    2. 构建词汇表:{“我”:0, “爱”:1, “机器学习”:2}
    3. 生成向量:[1, 1, 1](每个词出现1次)
    corpus = ["I love ML", "ML is fun"]
    → 词汇表:["I", "love", "ML", "is", "fun"]
    → 向量化:[[1,1,1,0,0], [0,0,1,1,1]]
    
  • TF-IDF(TfidfVectorizer

    核心思想:衡量词语在文档中的重要程度

    解决痛点:抑制高频但无意义的词(如“的”、“是”)
    公式

    TF = 词在文档中出现次数 / 文档总词数
    IDF = log(总文档数 / (包含该词的文档数 + 1))
    TF-IDF = TF(词频) × IDF(逆文档频率)
    

    物理意义

    • 常见词(如"的")→ IDF值低 → 权重低
    • 专业词(如"梯度下降")→ IDF值高 → 权重高

    举例
    在1000篇文档中,“机器学习”出现在20篇,某文档中该词出现5次:
    TF = 5 / 文档总词数
    IDF = log(1000/20) ≈ 3.9
    TF-IDF = TF * 3.9

(3)无量纲化(预处理)

  • 标准化(StandardScaler)
    z = (x - μ) / σ (μ:均值, σ:标准差)
    将数据缩放到均值为0,标准差为1

  • 归一化(MinMaxScaler)
    x' = (x - min) / (max - min)
    将数据压缩到[0,1]区间

(4)特征降维(PCA)

  • 为什么降维? 消除冗余特征,加速训练
  • 核心思想:找到数据最大方差方向,用更少维度保留主要信息
  • 数学本质:找到数据方差最大的方向(主成分)
    步骤
    1. 计算协方差矩阵
    2. 求矩阵的特征值和特征向量
    3. 按特征值从大到小保留前k个特征向量
      投影公式:新坐标 = 原始数据 × 特征向量矩阵

完整示例:鸢尾花分类

# 1. 导入工具库
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import make_pipeline# 2. 创建处理管道
pipeline = make_pipeline(StandardScaler(),   # 标准化PCA(n_components=2), # 降维到2维RandomForestClassifier() # 分类模型
)# 3. 训练评估
pipeline.fit(X_train, y_train)
accuracy = pipeline.score(X_test, y_test)
print(f"模型准确率:{accuracy:.2f}")
http://www.xdnf.cn/news/1210555.html

相关文章:

  • 如何解决人工智能在社会治理中面临的技术和伦理挑战?
  • 网络原理--HTTPHTTPS
  • AI产品经理手册(Ch3-5)AI Product Manager‘s Handbook学习笔记
  • PyCharm插件开发与定制指南:打造个性化开发环境
  • FSMC的配置和应用
  • SpringBoot集成deepseek
  • Export useForm doesn‘t exist in target module
  • vue3组件通信的几种方法,详解
  • 05动手学深度学习(下)
  • Linux - 权限的理解(深入浅出,详细细微)
  • 书籍推荐算法研究
  • gRPC性能陷阱:低延迟网络下的客户端瓶颈揭秘
  • Spark SQL 数组函数合集:array_agg、array_contains、array_sort…详解
  • Zynq SOC FPGA嵌入式裸机设计和开发教程自学笔记:GPIO扩展与中断控制技术,万字详解!!
  • 【变更性别】
  • TCPDump实战手册:协议/端口/IP过滤与组合分析指南
  • ESP32学习-1.第一个程序helloworld
  • 子数组和 问题汇总
  • FPGA实现SRIO高速接口与DSP交互,FPGA+DSP异构方案,提供3套工程源码和技术支持
  • Linux_库制作与原理浅理解
  • Python高效历史记录管理:保存最后N个元素的完整指南
  • 【CSS】盒子类型
  • 功率场效应晶体管MOSFET关键指标
  • leaflet中绘制轨迹线的大量轨迹点,解决大量 marker 绑定 tooltip 同时显示导致的性能问题
  • 车载刷写架构 --- 刷写思考扩展
  • Redis的持久化策略-AOF和RDB(详细图解)
  • Java面试宝典:MySQL8新特性底层原理
  • Vue2 vs Vue3:核心差异与升级亮点
  • DeepSeek MoE 技术解析:模型架构、通信优化与负载均衡
  • 飞书 —— 多维表格 —— AI生成