支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)
SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器。SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一。
SVM被提出于1964年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,在人像识别、文本分类等模式识别(pattern recognition)问题中有得到应用。
import numpy as np from scipy import io as spio from matplotlib import pyplot as plt from sklearn import svm def SVM(): '''data1——线性分类''' data1 = spio.loadmat('data1.mat') X = data1['X'] y = data1['y'] y = np.ravel(y) plot_data(X, y) model = svm.SVC(C=1.0, kernel='linear').fit(X, y) # 指定核函数为线性核函数 plot_decisionBoundary(X, y, model) # 画决策边界 '''data2——非线性分类''' data2 = spio.loadmat('data2.mat') X = data2['X'] y = data2['y'] y = np.ravel(y) plt = plot_data(X, y) plt.show() model = svm.SVC(gamma=100).fit(X, y) # gamma为核函数的系数,值越大拟合的越好 plot_decisionBoundary(X, y, model, class_='notLinear') # 画决策边界 # 作图 def plot_data(X, y): plt.figure(figsize=(10, 8)) pos = np.where(y == 1) # 找到y=1的位置 neg = np.where(y == 0) # 找到y=0的位置 p1, = plt.plot(np.ravel(X[pos, 0]), np.ravel(X[pos, 1]), 'ro', markersize=8) p2, = plt.plot(np.ravel(X[neg, 0]), np.ravel(X[neg, 1]), 'g^', markersize=8) plt.xlabel("X1") plt.ylabel("X2") plt.legend([p1, p2], ["y==1", "y==0"]) return plt # 画决策边界 def plot_decisionBoundary(X, y, model, class_='linear'): plt = plot_data(X, y) # 线性边界 if class_ == 'linear': w = model.coef_ b = model.intercept_ xp = np.linspace(np.min(X[:, 0]), np.max(X[:, 0]), 100) yp = -(w[0, 0] * xp + b) / w[0, 1] plt.plot(xp, yp, 'b-', linewidth=2.0) plt.show() else: # 非线性边界 x_1 = np.transpose(np.linspace(np.min(X[:, 0]), np.max(X[:, 0]), 100).reshape(1, -1)) x_2 = np.transpose(np.linspace(np.min(X[:, 1]), np.max(X[:, 1]), 100).reshape(1, -1)) X1, X2 = np.meshgrid(x_1, x_2) vals = np.zeros(X1.shape) for i in range(X1.shape[1]): this_X = np.hstack((X1[:, i].reshape(-1, 1), X2[:, i].reshape(-1, 1))) vals[:, i] = model.predict(this_X) plt.contour(X1, X2, vals, [0, 1], color='blue') plt.show() if __name__ == "__main__": SVM()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
我正在尝试应用文本排序算法,不幸的是,我有一个错误 我有以下错误: 回溯(最近一次呼叫最后一次): 文件“bayes_classif.py”,第22行,在 数据集=pd。read_csv('train.csv',编码='utf-8') 文件“/usr/local/lib/python3.6/dist-packages/pandas/io/parsers.py”,第678行,在解析器中 返回读取(文
支持向量机 概述 支持向量机(Support Vector Machines, SVM):是一种监督学习算法。 支持向量(Support Vector)就是离分隔超平面最近的那些点。 机(Machine)就是表示一种算法,而不是表示机器。 支持向量机 场景 要给左右两边的点进行分类 明显发现:选择D会比B、C分隔的效果要好很多。 支持向量机 原理 SVM 工作原理 对于上述的苹果和香蕉,我们想象为
支持向量机(Support Vector Machine,SVM它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,学习策略是间隔最大化,最终可转化为一个凸二次规划问题的求解。 直观来看,位于两类训练样本“正中间”的划分超平面效果最好,即中间最粗的那条。 一般使用支持向量机时还会使用核函数,这样支持向量机会成为实质上的非线性分类器。 基本概念 在样本空间中,划分超平面可以定义为
主要内容:初识支持向量机,支持向量机组成,支持向量机本质,支持向量机应用,总结支持向量机,英文全称“Support Vector Machines”(简称 SVM),它是机器学习中最常用的一种“分类算法”。SVM 是一种非常优雅的算法,有着非常完善的数学理论基础,其预测效果,在众多机器学习模型中可谓“出类拔萃”。在深度学习没有普及之前,“支持向量机”可以称的上是传统机器学习中的“霸主”,下面我们将介绍本节的主人公——支持向量机(SVM)。 初识支持向量机 支持向量机是有监督
选取出关键特征 通过tf-idf计算出来的数值是某个特征(词)对于这篇文档的权重,不代表这个特征(词)在文本分类中的权重。这很容易理解,比如某一个特征(词)在多个分类中的tf-idf是不一样的,但是这个特征对于这个分类问题的权重肯定是一个定值。 选取重要的特征的方法可以是:1.)按tf-idf排序从大到小选topN;2)按特征的普遍性选取(在多个类别中出现过);3)按特征在不同文档中tf-idf的
支持向量机(SVM)是一类按监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面,可以将问题化为一个求解凸二次规划的问题。与逻辑回归和神经网络相比,支持向量机,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。