在这次实验中,我们将尝试提取基本的图像特征并利用支持向量机或多层感知机算法对提取的特征进行图像分类。

导入:

import numpy as np
import matplotlib
from scipy.ndimage import uniform_filter

数据加载:

# 读取提供的cifar10-mini数据集,
data = np.load('cifar10-mini.npz')X_train= data['X_train']
X_val= data['X_val']
X_test= data['X_test']
y_train= data['y_train']
y_val= data['y_val']
y_test= data['y_test']print(X_train.shape)
print(X_val.shape)
print(X_test.shape)

运行结果如下:

(5000, 32, 32, 3)
(500, 32, 32, 3)
(500, 32, 32, 3)

提取图像特征:

方向梯度直方图 HOG (Histogram of Oriented Gridients)特征检测算法,最早是由法国研究员Dalal等在CVPR-2005上提出来的,一种解决人体目标检测的图像描述子,是一种用于表征图像局部梯度方向和梯度强度分布特性的描述符。其主要思想是:在边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示图像中物体的外形轮廓,但会忽略掉颜色信息。特征维度是144维。

hog_feature是接收一张图像然后返回这张图像的特征向量。你可以使用这个函数提取所有图像的特征并将其存入 X_train_feats, X_val_feats, X_test_feats 这三个变量中(他们分别代表训练集、验证集和测试集的特征)。

def hog_feature(im):# convert rgb to grayscale if neededif im.ndim == 3:image = np.dot(im[...,:3], [0.299, 0.587, 0.144])else:image = np.atleast_2d(im)sx, sy = image.shape # image sizeorientations = 9 # number of gradient binscx, cy = (8, 8) # pixels per cellgx = np.zeros(image.shape)gy = np.zeros(image.shape)gx[:, :-1] = np.diff(image, n=1, axis=1) # compute gradient on x-directiongy[:-1, :] = np.diff(image, n=1, axis=0) # compute gradient on y-directiongrad_mag = np.sqrt(gx ** 2 + gy ** 2) # gradient magnitudegrad_ori = np.arctan2(gy, (gx + 1e-15)) * (180 / np.pi) + 90 # gradient orientationn_cellsx = int(np.floor(sx / cx))  # number of cells in xn_cellsy = int(np.floor(sy / cy))  # number of cells in y# compute orientations integral imagesorientation_histogram = np.zeros((n_cellsx, n_cellsy, orientations))for i in range(orientations):# create new integral image for this orientation# isolate orientations in this rangetemp_ori = np.where(grad_ori < 180 / orientations * (i + 1),grad_ori, 0)temp_ori = np.where(grad_ori >= 180 / orientations * i,temp_ori, 0)# select magnitudes for those orientationscond2 = temp_ori > 0temp_mag = np.where(cond2, grad_mag, 0)orientation_histogram[:,:,i] = uniform_filter(temp_mag, size=(cx, cy))[int(cx/2)::cx, int(cy/2)::cy].Treturn orientation_histogram.ravel()
X_train_feats = [hog_feature(X_train[i]) for i in range(X_train.shape[0])]
X_val_feats = [hog_feature(X_val[i]) for i in range(X_val.shape[0])]
X_test_feats = [hog_feature(X_test[i]) for i in range(X_test.shape[0])]# 预处理: 减去均值
mean_feat = np.mean(X_train_feats, axis=0, keepdims=True)
X_train_feats -= mean_feat
X_val_feats -= mean_feat
X_test_feats -= mean_feat# 预处理: 除以标准差
std_feat = np.std(X_train_feats, axis=0, keepdims=True)
X_train_feats /= std_feat
X_val_feats /= std_feat
X_test_feats /= std_featprint(X_train_feats.shape)
print(X_val_feats.shape)
print(X_test_feats.shape)

运行结果如下:

(5000, 144)
(500, 144)
(500, 144)

使用支持向量机(SVM)进行分类:

使用不同的核函数作为SVM模型的参数,选择验证集上准确率最好的SVM核函数,将训练集和验证集组合训练上面选择的核函数SVM模型,在测试集上评估正确率,并查看各类别的查准率、查全率等指标。

from sklearn.svm import SVC
from sklearn.metrics import classification_report# 训练集、验证集特征及标签组合
X_train_val_feats = None
y_train_val = None

使用多层感知机(MLP)进行分类:

自行定义多层感知机的batch_size, hidden_layer_sizes, solver, learning_rate_init, max_iter, activation等超参数进行模型训练,将训练集和验证集组合训练上面选择的超参数MLP模型,在测试集上评估正确率,并查看各类别的查准率、查全率等指标。绘制MLP模型在训练集和验证集组合训练过程中的损失函数Loss曲线。

from sklearn.neural_network import MLPClassifier
from sklearn.metrics import classification_report# 训练集、验证集特征及标签组合
X_train_val_feats = None
y_train_val = None

……

python与机器学习(六)——支持向量机(SVM) 多层感知机(MLP)相关推荐

  1. Python,OpenCV基于支持向量机SVM的手写数字OCR

    Python,OpenCV基于支持向量机SVM的手写数字OCR 1. 效果图 2. SVM及原理 2. 源码 2.1 SVM的手写数字OCR 2.2 非线性SVM 参考 上一节介绍了基于KNN的手写数 ...

  2. 机器学习实战 支持向量机SVM 代码解析

    机器学习实战 支持向量机SVM 代码解析 <机器学习实战>用代码实现了算法,理解源代码更有助于我们掌握算法,但是比较适合有一定基础的小伙伴.svm这章代码看起来风轻云淡,实则对于新手来说有 ...

  3. 多层感知机MLP常见的超参数有哪些?如果MLP模型对于数据集过拟合了,如何调整这些超参数来进行解决?

    多层感知机MLP常见的超参数有哪些?如果MLP模型对于数据集过拟合了,如何调整这些超参数来进行解决? 目录

  4. 多层感知机MLP、RBF网络、Hopfield网络、自组织映射神经网络、神经网络算法地图

    多层感知机MLP.RBF网络.Hopfield网络.自组织映射神经网络.神经网络算法地图 目录

  5. 花书+吴恩达深度学习(一)前馈神经网络(多层感知机 MLP)

    目录 0. 前言 1. 每一个神经元的组成 2. 梯度下降改善线性参数 3. 非线性激活函数 4. 输出单元 4.1. 线性单元 4.2. sigmoid 单元 4.3. softmax 单元 5.  ...

  6. 机器学习之支持向量机SVM之python实现ROC曲线绘制(二分类和多分类)

    目录 一.ROC曲线 二.TP.FP.TN.FN 三. python绘制ROC曲线(二分类) 1.思路 2.关键代码 3.完整代码 四. python绘制ROC曲线(多分类) 五.参考文献 一.ROC ...

  7. 优达学城机器学习之--支持向量机(SVM)

    前言 SVM是支持向量机的简称(Support Vector Machine) 文章目录如下: 简述 选择分隔线 核函数(kernel)及其参数c, gamma 过拟合 over-fitting SV ...

  8. OpenCV之ml 模块. 机器学习:支持向量机(SVM)介绍 支持向量机对线性不可分数据的处理

    支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向 ...

  9. torch学习(六):多层感知机

    文章目录 引入 1.1 隐藏层 1.2 激活函数 1.2.1 ReLU函数: 1.2.2 sigmoid函数 2 完整代码 支持代码 引入   深度学习主要关注多层模型,接下来将以多层感知机 (mul ...

最新文章

  1. 二叉树 1.0 -- 创建二叉树、遍历二叉树、二叉树常见问题求解
  2. mysql分页关键词_数据库分页关键字
  3. 【若依(ruoyi)】table定制列宽
  4. 计算机小技巧7,大神也未必知道的7个电脑小技巧,你会吗?
  5. linux curl命令验证服务器断点续传支持
  6. mybatis工作原理_万字好文!MyBatis 的工作原理,你了解过吗?
  7. phpcms模型缓存更新原理分析(转)
  8. Web存储—sessionStorage存储
  9. 进阶01Object类
  10. 华为服务器怎么装win7系统教程视频教程,华为交换机配置教程|华为交换机配置视频教程完整版...
  11. web应用程序安全性测试_立即提高Web应用安全性的6种方法
  12. Mysql Workbench使用教程
  13. 计算机基础知识是几年级,[初中一年级]计算机基础知识ppt模版课件.ppt
  14. 族谱程序php,族谱系统
  15. 动态规划——详细入门讲解
  16. 手持小电风扇原理图挂脖小风扇电路图
  17. Html论坛提问页面,技术分享 - 制作论坛发帖页面(采用html()方式、操作节点的方式)...
  18. docker之SonarQube导出PDF报告
  19. 1linux 课程引入
  20. mysql 函数 人民币大写_sql 数字转人民币大写函数(两种方法)

热门文章

  1. TurboMail邮件服务器帮你应付电子邮件归档危机
  2. 做人要无需,做事要务实!
  3. Windows Server 2008 故障转移群集简介
  4. mysql------explain工具
  5. 弱鸡儿长乐爆零旅Day5
  6. Jenkins中Publish Over SSH插件使用
  7. Laravel-数据库队列
  8. 【已验证】帝国cms 里 栏目列表模板获取同级栏目
  9. 快速部署与收回解决方案包
  10. 【Java】Springboot项目中Transactional的使用方式