svm python 多分类_机器学习之SVM多分类
实验要求
数据说明 :数据集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多分类相关推荐
- svm 支持向量机 回归 预测_机器学习:简单理解支持向量机SVM
在介绍过贝叶斯之后,今天尝试着给大家介绍支持向量机SVM. 在机器学习中,SVM试图找到一个最佳的超平面,该平面可以最佳地分割来自不同类别的观察结果.一个在N-1维的超平面可以分割Ñ维的特征空间.例如 ...
- python支持向量机回归_机器学习实战-支持向量机原理、Python实现和可视化(分类)...
支持向量机(SVM)广泛应用于模式分类和非线性回归领域. SVM算法的原始形式由Vladimir N.Vapnik和Alexey Ya提出.自从那以后,SVM已经被巨大地改变以成功地用于许多现实世界问 ...
- matlab svm工具箱_机器学习笔记--SVM(MATLAB 实现代码)
我们知道SVM的基本原理就是找一个超平面(广义平面)将样本分为几个部分,即分类. MATLAB中自带SVM包,使用起来也十分方便,假如X是特征矩阵,Y是分类标签(可以是数值(1.2)也可以是strin ...
- sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比
机器学习 xueyifeiyun1989zx,公众号:围着围巾的小黑机器学习之监督学习实战 前文我们提到机器学习中的监督学习,其中有一个模型是我们提到的但是没有训练测试的,叫做支持向量机(简称SVM) ...
- svm解决兵王问题_机器学习: svm
本周学习内容为SVM的基本原理和运用. 参考资料:耳东陈:零基础学SVM-Support Vector Machine(一) 1.什么是SVM SVM的全称是Support Vector Machin ...
- 机器学习:分类_机器学习基础:K最近邻居分类
机器学习:分类 In the previous stories, I had given an explanation of the program for implementation of var ...
- 机器学习分类_机器学习之简单分类模型
本文主要探讨了机器学习算法中一些比较容易理解的分类算法,包括二次判别分析QDA,线性判别分析LDA,朴素贝叶斯Naive Bayes,以及逻辑回归Logistic Regression,还会给出在ir ...
- python猫狗大战讲解_机器学习 | 猫狗大战
建议阅读时长 8 分钟 前言 对于机器学习来说,数据的重要性无可厚非,大部分处理机器学习的问题都是在处理数据,包括数据的清洗,归一化等,好的数据质量能大大提高模型的预测性能 但是对与初学者来说,数据变 ...
- 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_机器学习之朴素贝叶斯
1.贝叶斯原理 朴素贝叶斯分类(Naive Bayesian,NB)源于贝叶斯理论,是一类基于概率的分类器,其基本思想:假设样本属性之间相互独立,对于给定的待分类项,求解在此项出现的情况下其他各个类别 ...
- python决策树预测模型_机器学习:决策树(Decision Tree)
决策树(decision tree)是一种基本的分类与回归方法.在分类问题中,它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布.在学习时,利用训练数据,根据损失 ...
最新文章
- Echo团队Alpha冲刺随笔 - 第九天
- acwing单源最短路的建图模式总结
- web大屏展示用到的组件_基于 HTML5 的工业组态高炉炼铁 3D 大屏可视化
- 使用Fair kripke来判断kripke的可达性和可避免性
- 关于中值滤波算法,以及C语言实现(转)
- 《大话数据结构》第9章 排序 9.5 直接插入排序
- MPU6050参考代码
- python软件下载网站
- LeetCode Algorithm 589. N 叉树的前序遍历
- 安装包安装服务,点修复出现的错误”Error 1001:指定的服务已存在“ 解决办法...
- 应用事件探查器优化SQL Server系统[转]
- 类创建几种java_Java创建对象的几种方式
- Debug时,出现Unable to evaluate the expression Cannot find xxx
- QLab Pro如何对工作区进行设置
- 最新四方支付平台源码(PHP版本,完全开源)提供第四方支付系统搭建服务。
- 字体如何设计,这几点很重要
- 友盟推送:测试模式推送完成,但却收不到推送信息
- pc端下载微信视频号中的视频
- 上传下载文件实例(vsftp服务器+nginx)
- 免费又好用的Windows任务栏透明化工具——Translucent TB