实验要求
数据说明 :数据集data4train.mat是一个2*150的矩阵,代表了150个样本,每个样本具有两维特征,其类标在truelabel.mat文件中,trainning sample 图展示了理想的分类类结果;
方案选择:
选择并实现一种两分类方法(如感知机方法,SVM等);在此基础上设计使用该二分类器实现三分类问题的策略,并程序实现,画出分类结果
直接采用现成的可实现多分类的方法(如多类SVM,BP网络等)进行问题求解。画出分类结果。我选择第二种,时间不够,只能使用sklearn中的svc实现

实现思想
一对一:
其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。
优点:不需要重新训练所有的SVM,只需要重新训练和增加语音样本相关的分类器。在训练单个模型时,速度较快。
缺点:所需构造和测试的二值分类器的数量关于k成二次函数增长,总训练时间和测试时间相对较慢。

一对多
训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。
**优点:**训练k个分类器,个数较少,其分类速度相对较快。
缺点:
①每个分类器的训练都是将全部的样本作为训练样本,这样在求解二次规划问题时,训练速度会随着训练样本的数量的增加而急剧减慢;
②同时由于负类样本的数据要远远大于正类样本的数据,从而出现了样本不对称的情况,且这种情况随着训练数据的增加而趋向严重。解决不对称的问题可以引入不同的惩罚因子,对样本点来说较少的正类采用较大的惩罚因子C;
③还有就是当有新的类别加进来时,需要对所有的模型进行重新训练

层次树:
首先将所有类别分为两个类别,再将子类进一步划分为两个次级子类,如此循环下去,直到所有的节点都只包含一个单独的类别为止,此节点也是二叉树树种的叶子。该分类将原有的分类问题同样分解成了一系列的两类分类问题,其中两个子类间的分类函数采用SVM。

我这里选择一对多,因为只有三类

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/7/2 23:25
# @Author : 朱红喜
# @File : Multi-classify.py
# @Software: PyCharm

# 引入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import label_binarize
from sklearn.multiclass import OneVsRestClassifier

from FileUtil import FileUtil

# 加载数据
# 1.训练模型的数据
X = FileUtil.open_matfile("data4train.mat").T # 数据集
y = FileUtil.open_matfile("truelabel.mat") # 真实标签
print(X)
print(y[0])
print(y.shape)

# 2.测试模型的数据
X_2 = FileUtil.open_matfile("data4test.mat").T
y_2 = FileUtil.open_matfile("testtruelabel.mat")
print(X_2)
print(y_2[0])
print(y_2.shape)

# 标签二值化
y = label_binarize(y[0], classes=[1, 2, 3])
# print(y)

# 划分训练集和测试集
# 设置种类
n_classes = y.shape[1]
# print(y.shape[1])

# 训练模型并预测
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape
# 随机化数据,并划分训练数据和测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5, random_state=0)

# 训练模型
# Learn to predict each class against the other
model = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True, random_state=random_state))
clt = model.fit(X_train, y_train)

# 性能评估
# 1.在训练集上的得分
clt.score(X_train, y_train)
print(clt.score(X_train, y_train))

# 2.在测试集上的评分
clt.score(X_test, y_test)
print(clt.score(X_test, y_test))

# 查看各类别的预测情况
y_predict_scores = clt.decision_function(X_test)
print(y_predict_scores[:149])

# 转化为原始标签模式
result = np.argmax(clt.decision_function(X_test), axis=1)[:149]
# print(result)
# 转化为老师需要的 1,2,3类标
for i in range(result.__len__()):
result[i] = result[i]+1

print(result)

print("++++++++++++++++++++++data4train数据集++++++++++++++++++")
result_2 = np.argmax(clt.decision_function(X), axis=1)[:149]
# print(result_2)
# 转化为老师需要的 1,2,3类标
for i in range(result_2.__len__()):
result_2[i] = result_2[i]+1
print(result_2)

print("++++++++++++++++++++++data4test测试集++++++++++++++++++")
result_2 = np.argmax(clt.decision_function(X_2), axis=1)[:59]
# print(result_2)
# 转化为老师需要的 1,2,3类标
for i in range(result_2.__len__()):
result_2[i] = result_2[i]+1
print(result_2)

分类结果

转载于:https://www.cnblogs.com/liuys635/p/11183827.html

机器学习之SVM多分类相关推荐

  1. 机器学习:SVM多分类,SVM回归(SVR)

    文章目录 分类和回归的关系: 多分类问题处理的普适的方法: 一对多(One VS Rest): 一对一(One vs One): 有向无环图方法(Directed Acyclic Graph Meth ...

  2. 【机器学习】SVM多分类问题及基于sklearn的Python代码实现

    SVM多分类问题及Python代码实现 1. 什么是SVM? 2. SVM的分类 3. SVM决策函数类型 4. SVM多分类的Python代码实现 参考资料 1. 什么是SVM? 对于这个点已经介绍 ...

  3. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. 机器学习(二十一)——Optimizer, 单分类SVM多分类SVM, 时间序列分析

    http://antkillerfarm.github.io/ Optimizer 在<机器学习(一)>中,我们已经指出梯度下降是解决凸优化问题的一般方法.而如何更有效率的梯度下降,就是本 ...

  5. 【机器学习】SVM基本线性可分与多分类

    上一篇讲了线性可分的SVM推导,现在讲一讲基本线性可分的情形,后面还会介绍多分类的使用以及核函数的使用. outlier 的处理 给定数据集  ,当样本数据大部分为线性可分的,存在少量异常值使得数据线 ...

  6. .net随笔-vb.net Accord.Net机器学习之SVM分类

    线性核分类 Imports Accord.ControlsImports Accord.IOImports Accord.MathImports Accord.Statistics.Distribut ...

  7. 【机器学习】监督学习--(分类)支持向量机SVM②

    注:数据集在文章末尾 (1)SVM–线性分类 import numpy as np import matplotlib.pyplot as plt from sklearn import svm# 创 ...

  8. 搜索引擎——用户搜索意图的理解及其难点解析,本质是利用机器学习用户的意图分类...

    用户搜索意图的理解及其难点解析 搜索引擎涉及的技术非常的繁复,既有工程架构方面的,又有算法策略方面的.综合来讲,一个搜索引擎的技术构建主要包含三大部分: 对 query 的理解 对内容(文档)的理解 ...

  9. 【机器学习】SVM学习(三):线性分类器的求解

    [机器学习]SVM学习(三):线性分类器的求解 2016-10-10 19:56 239人阅读 评论(0) 收藏 举报 本文章已收录于:  机器学习知识库  分类: 机器学习(37)  目录(?)[+ ...

最新文章

  1. 容器云之K8s自动化安装方式的选择
  2. asp怎么循环增加字段和字段对应的值_ASP.NET Core教程「三」实体字段属性
  3. 电脑打印机共享,打印机共享
  4. C#上位机串口软件开发--第1讲 工程创建
  5. 在URL里传入数组到HTML 里。
  6. Python趣味编程---Python也会讲笑话
  7. iOS使用新浪微博、微信官方SDK分享内容
  8. python中dtypes_Dataframe创建及index,columns,values,dtypes等属性介绍
  9. 【Java基础】final关键字总结
  10. 《像计算机科学家一样思考Python》——4.4 封装
  11. Data-mediator入门系列2
  12. Mybatis之代码自动生成工具
  13. C语言实例第9期:提取字符串中全部数字
  14. springboot建筑造价师资格考试应试网站设计与实现毕业设计源码260839
  15. 一个完整的机器学习模型的流程
  16. 万物皆可GAN之pytorch和神经网络
  17. 为什么 MongoDB 使用 B 树?
  18. 洛谷 p2387 [noi2014] 膜fa♂森林 lct维护最小生成树
  19. 计算机毕业设计Java智能超市导购系统(源码+系统+mysql数据库+lw文档)
  20. P2690 [USACO04NOV]Apple Catching G 题解

热门文章

  1. 计算机论文的写作方法有哪些,计算机专业论文的写作方法.ppt
  2. C语言自底向上分析方法,算法6-12:自底向上的赫夫曼编码 (C语言代码)
  3. Java 时间处理 PeriodDuration
  4. mybatis 缓存 一级缓存
  5. nginx ngx_http_auth_basic_module(Basic Authentication)
  6. 1.14 关于梯度检验实现的注记
  7. python猜名词甲乙丙_用python实现了一下:甲乙两人互猜数字(数理逻辑)
  8. 单片机两个正玄波信号的相位差计算_51单片机的定时器/计数器的原理与使用
  9. vSphere 7 With Kubernetes系列01:随想
  10. RETIRED CERTIFICATIONS AND EXAMS AND BADGES(VMware 正式命名方式变更以及考试退役时间)