当前位置:首页 > 技术分享 > 正文内容

第一圈代码数字识别:用SVM + HOG快速建立基线

完整代码(Google Colab / Jupyter Notebook 均可)

python
 numpy  np matplotlibpyplot  plt sklearnsvm  SVC sklearnmetrics  accuracy_score confusion_matrix ConfusionMatrixDisplay sklearndatasets  fetch_openml skimagefeature  hog skimagetransform  resize tqdm  tqdm  X y  fetch_openml version return_X_y as_frame parserX  Xastypenpfloat32  y  yastypenpint32X_train y_train  X yX_test y_test  X y images pixels_per_cell 
    
    输入: images shape (N, 784) 展平的图像
    输出: HOG特征向量 (N, 特征维度)
    """
    features  
     img  tqdmimages desc
        
        img_2d  imgreshape 
        
        hog_feat  hog
            img_2d
            pixels_per_cellpixels_per_cell
            cells_per_block 
            visualize
            feature_vector
        
        featuresappendhog_feat
     nparrayfeaturesX_train_hog  extract_hog_featuresX_trainX_test_hog  extract_hog_featuresX_testclf  SVCkernel C random_stateclffitX_train_hog y_traintrain_pred  clfpredictX_train_hogtrain_acc  accuracy_scorey_train train_predtest_pred  clfpredictX_test_hogtest_acc  accuracy_scorey_test test_prederror_indices  npwheretest_pred  y_testnum_show   error_indicesselected  nprandomchoiceerror_indices num_show replacefig axes  pltsubplots  figsize  i idx  selected
    row col  i   i  
    
    img  X_testidxreshape 
    axesrow colimshowimg cmap
    axesrow colset_title
    axesrow colaxispltsuptitle fontsizeplttight_layoutpltshowcm  confusion_matrixy_test test_preddisp  ConfusionMatrixDisplayconfusion_matrixcmdispplotcmapplttitlepltshow joblib
joblibdumpclf

运行后你会看到什么(预期输出示例)

text
训练集大小: 10000, 测试集大小: 2000
提取HOG特征: 100%|██████████| 10000/10000 [00:12<00:00, 789.23it/s]
提取HOG特征: 100%|██████████| 2000/2000 [00:02<00:00, 801.45it/s]
HOG特征维度: 324
训练集准确率: 0.8921
测试集准确率: 0.6734

准确率大约在 67% 左右——这就是不用深度学习的天花板。


这段代码让你学到什么(比准确率重要)

代码模块对应核心概念后续深度学习怎么超越
fetch_openml 加载数据数据标准化、归一化同样要归一化,但深度学习对归一化更敏感
hog() 特征提取手工特征工程——人告诉模型看什么CNN自动学习特征,不再需要HOG
SVC(kernel='linear')线性分类器,只能找直线边界神经网络可以拟合任意非线性边界
accuracy_score 评估分类任务的基础评价指标同样的指标,但深度模型会更高(>95%)
错误样本可视化知道模型“死在哪”深度模型也会错,但错的样本往往更“像人”

动手实验(必做,5分钟)

运行完上面代码后,修改下面任意一个参数,观察准确率变化:

  1. C=1.0 改成 C=100.0(更强的拟合能力)→ 训练集准确率上升,但测试集可能下降(过拟合)。

  2. pixels_per_cell=(4,4) 改成 (8,8)(更粗糙的特征)→ 特征维度降低,速度变快,但准确率可能下降。

  3. 把训练集从10000改成5000 → 准确率下降,让你直观感受“数据量对AI的影响”。


下一步预告(第二圈要做什么)

现在你用SVM只能达到67%,而且对旋转、倾斜、手写风格变化极其敏感。第二圈我们会用PyTorch搭一个简单的CNN,不做任何特征工程,直接喂像素进去,准确率直接跳到95%+。

今晚的任务:把上面代码跑通,截一张“混淆矩阵”的图保存下来。等第二圈CNN跑完后,把两张混淆矩阵放在一起对比——那会是你对“深度学习为什么有效”最震撼的一次体验。

完整代码(Google Colab / Jupyter Notebook 均可)

python
 numpy  np matplotlibpyplot  plt sklearnsvm  SVC sklearnmetrics  accuracy_score confusion_matrix ConfusionMatrixDisplay sklearndatasets  fetch_openml skimagefeature  hog skimagetransform  resize tqdm  tqdm  X y  fetch_openml version return_X_y as_frame parserX  Xastypenpfloat32  y  yastypenpint32X_train y_train  X yX_test y_test  X y images pixels_per_cell 
    
    输入: images shape (N, 784) 展平的图像
    输出: HOG特征向量 (N, 特征维度)
    """
    features  
     img  tqdmimages desc
        
        img_2d  imgreshape 
        
        hog_feat  hog
            img_2d
            pixels_per_cellpixels_per_cell
            cells_per_block 
            visualize
            feature_vector
        
        featuresappendhog_feat
     nparrayfeaturesX_train_hog  extract_hog_featuresX_trainX_test_hog  extract_hog_featuresX_testclf  SVCkernel C random_stateclffitX_train_hog y_traintrain_pred  clfpredictX_train_hogtrain_acc  accuracy_scorey_train train_predtest_pred  clfpredictX_test_hogtest_acc  accuracy_scorey_test test_prederror_indices  npwheretest_pred  y_testnum_show   error_indicesselected  nprandomchoiceerror_indices num_show replacefig axes  pltsubplots  figsize  i idx  selected
    row col  i   i  
    
    img  X_testidxreshape 
    axesrow colimshowimg cmap
    axesrow colset_title
    axesrow colaxispltsuptitle fontsizeplttight_layoutpltshowcm  confusion_matrixy_test test_preddisp  ConfusionMatrixDisplayconfusion_matrixcmdispplotcmapplttitlepltshow joblib
joblibdumpclf

运行后你会看到什么(预期输出示例)

text
训练集大小: 10000, 测试集大小: 2000
提取HOG特征: 100%|██████████| 10000/10000 [00:12<00:00, 789.23it/s]
提取HOG特征: 100%|██████████| 2000/2000 [00:02<00:00, 801.45it/s]
HOG特征维度: 324
训练集准确率: 0.8921
测试集准确率: 0.6734

准确率大约在 67% 左右——这就是不用深度学习的天花板。


这段代码让你学到什么(比准确率重要)

代码模块对应核心概念后续深度学习怎么超越
fetch_openml 加载数据数据标准化、归一化同样要归一化,但深度学习对归一化更敏感
hog() 特征提取手工特征工程——人告诉模型看什么CNN自动学习特征,不再需要HOG
SVC(kernel='linear')线性分类器,只能找直线边界神经网络可以拟合任意非线性边界
accuracy_score 评估分类任务的基础评价指标同样的指标,但深度模型会更高(>95%)
错误样本可视化知道模型“死在哪”深度模型也会错,但错的样本往往更“像人”

动手实验(必做,5分钟)

运行完上面代码后,修改下面任意一个参数,观察准确率变化:

  1. C=1.0 改成 C=100.0(更强的拟合能力)→ 训练集准确率上升,但测试集可能下降(过拟合)。

  2. pixels_per_cell=(4,4) 改成 (8,8)(更粗糙的特征)→ 特征维度降低,速度变快,但准确率可能下降。

  3. 把训练集从10000改成5000 → 准确率下降,让你直观感受“数据量对AI的影响”。


下一步预告(第二圈要做什么)

现在你用SVM只能达到67%,而且对旋转、倾斜、手写风格变化极其敏感。第二圈我们会用PyTorch搭一个简单的CNN,不做任何特征工程,直接喂像素进去,准确率直接跳到95%+。

今晚的任务:把上面代码跑通,截一张“混淆矩阵”的图保存下来。等第二圈CNN跑完后,把两张混淆矩阵放在一起对比——那会是你对“深度学习为什么有效”最震撼的一次体验。

相关文章

2026年穿梭车故障率统计:哪个品牌最省心?

“穿梭车一年修三次?那你不是买了设备,是请了个爹。”我在统计30个在运项目的故障记录后发现:不同品牌穿梭车的故障率差距高达5倍。最省心的品牌平均8000小时无故障,最闹心的品牌2000小时就要修一次。...

从调包侠到AI开发者:我的实战避坑指南

最近后台收到不少读者留言,问得最多的问题是:“我想学AI开发,但不知道从哪开始,网上课程太多反而挑花了眼。”说实话,我太理解这种感觉了。两年前我转行做AI应用开发时,也踩过无数坑——花了三个月死磕线性...

手把手教你从零搭建一个RAG知识库问答系统

为什么你需要一个RAG系统?先问一个问题:你调用大模型API时,有没有遇到过这些尴尬时刻?问它你公司内部的操作手册,它一本正经地胡说八道让它分析你刚收到的客户邮件,它说“我的知识截止到2024年”想让...

你的AI应用上线就翻车?这份评测与优化指南请收好

一个扎心的真相你可能遇到过这样的场景:本地测试时AI回答得头头是道,一上线客户问了个刁钻问题,直接答非所问投了两个月精力做的AI助手,老板试用三分钟就关掉了页面明明代码没动过,昨天回答准确率90%,今...

AI开发者的“四层认知阶梯”——你在哪一层,决定了你能走多远

第0层:工具使用者(“调包侠”)典型画像:知道 import torch,但不知道 torch.Tensor 和 numpy.ndarray 有什么区别从GitHub clone项目,改改路径就能跑,...

AI开发“生存工具箱”——10个工具让你从“环境都配不好”到“一天搭完原型”

阶段0:环境准备(1小时内搞定,绝不拖延)工具用途一句话使用建议MinicondaPython环境隔离每个项目建一个独立env,别用系统Python,血的教训VS Code + Remote SSH远...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。