实验要求

数据说明 :数据集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)

分类结果

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

  1. svm 支持向量机 回归 预测_机器学习:简单理解支持向量机SVM

    在介绍过贝叶斯之后,今天尝试着给大家介绍支持向量机SVM. 在机器学习中,SVM试图找到一个最佳的超平面,该平面可以最佳地分割来自不同类别的观察结果.一个在N-1维的超平面可以分割Ñ维的特征空间.例如 ...

  2. python支持向量机回归_机器学习实战-支持向量机原理、Python实现和可视化(分类)...

    支持向量机(SVM)广泛应用于模式分类和非线性回归领域. SVM算法的原始形式由Vladimir N.Vapnik和Alexey Ya提出.自从那以后,SVM已经被巨大地改变以成功地用于许多现实世界问 ...

  3. matlab svm工具箱_机器学习笔记--SVM(MATLAB 实现代码)

    我们知道SVM的基本原理就是找一个超平面(广义平面)将样本分为几个部分,即分类. MATLAB中自带SVM包,使用起来也十分方便,假如X是特征矩阵,Y是分类标签(可以是数值(1.2)也可以是strin ...

  4. sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比

    机器学习 xueyifeiyun1989zx,公众号:围着围巾的小黑机器学习之监督学习实战 前文我们提到机器学习中的监督学习,其中有一个模型是我们提到的但是没有训练测试的,叫做支持向量机(简称SVM) ...

  5. svm解决兵王问题_机器学习: svm

    本周学习内容为SVM的基本原理和运用. 参考资料:耳东陈:零基础学SVM-Support Vector Machine(一) 1.什么是SVM SVM的全称是Support Vector Machin ...

  6. 机器学习:分类_机器学习基础:K最近邻居分类

    机器学习:分类 In the previous stories, I had given an explanation of the program for implementation of var ...

  7. 机器学习分类_机器学习之简单分类模型

    本文主要探讨了机器学习算法中一些比较容易理解的分类算法,包括二次判别分析QDA,线性判别分析LDA,朴素贝叶斯Naive Bayes,以及逻辑回归Logistic Regression,还会给出在ir ...

  8. python猫狗大战讲解_机器学习 | 猫狗大战

    建议阅读时长 8 分钟 前言 对于机器学习来说,数据的重要性无可厚非,大部分处理机器学习的问题都是在处理数据,包括数据的清洗,归一化等,好的数据质量能大大提高模型的预测性能 但是对与初学者来说,数据变 ...

  9. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_机器学习之朴素贝叶斯

    1.贝叶斯原理 朴素贝叶斯分类(Naive Bayesian,NB)源于贝叶斯理论,是一类基于概率的分类器,其基本思想:假设样本属性之间相互独立,对于给定的待分类项,求解在此项出现的情况下其他各个类别 ...

  10. python决策树预测模型_机器学习:决策树(Decision Tree)

    决策树(decision tree)是一种基本的分类与回归方法.在分类问题中,它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布.在学习时,利用训练数据,根据损失 ...

最新文章

  1. Echo团队Alpha冲刺随笔 - 第九天
  2. acwing单源最短路的建图模式总结
  3. web大屏展示用到的组件_基于 HTML5 的工业组态高炉炼铁 3D 大屏可视化
  4. 使用Fair kripke来判断kripke的可达性和可避免性
  5. 关于中值滤波算法,以及C语言实现(转)
  6. 《大话数据结构》第9章 排序 9.5 直接插入排序
  7. MPU6050参考代码
  8. python软件下载网站
  9. LeetCode Algorithm 589. N 叉树的前序遍历
  10. 安装包安装服务,点修复出现的错误”Error 1001:指定的服务已存在“ 解决办法...
  11. 应用事件探查器优化SQL Server系统[转]
  12. 类创建几种java_Java创建对象的几种方式
  13. Debug时,出现Unable to evaluate the expression Cannot find xxx
  14. QLab Pro如何对工作区进行设置
  15. 最新四方支付平台源码(PHP版本,完全开源)提供第四方支付系统搭建服务。
  16. 字体如何设计,这几点很重要
  17. 友盟推送:测试模式推送完成,但却收不到推送信息
  18. pc端下载微信视频号中的视频
  19. 上传下载文件实例(vsftp服务器+nginx)
  20. 免费又好用的Windows任务栏透明化工具——Translucent TB

热门文章

  1. SQL Bulk Insert
  2. Java课程设计——学生成绩管理系统
  3. 操作系统期末复习【超实用】
  4. 【JXTA概念介绍(翻译)】
  5. 视频教程-【孙伟】网页设计(切图)视频教程-UI
  6. c语言求个十百千万大写,大写数字一到十百千万怎么写?大写数字0到十百千万图片...
  7. 大神总结的图像处理学习路线
  8. Inf and NaN cannot be JSON encoded
  9. 浅谈 fluentd 使用
  10. 淘淘商城第107讲——添加购物车