找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

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

2026-7-14 20:07| 发布者: admin| 查看: 9| 评论: 0

摘要: 完整代码(Google Colab / Jupyter Notebook 均可)pythonnumpynpmatplotlibpyplotpltsklearnsvmSVCsklearnmetricsaccuracy_scoreconfusion_matrixConfusionMatrixDisplaysklearndatasetsfetch_openmlskimagefeature ...

完整代码(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跑完后,把两张混淆矩阵放在一起对比——那会是你对“深度学习为什么有效”最震撼的一次体验。



路过

雷人

握手

鲜花

鸡蛋

相关分类

QQ|Archiver|手机版|小黑屋|超联论坛

GMT+8, 2026-7-17 23:07 , Processed in 0.059380 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

返回顶部