精华内容
下载资源
问答
  • 本软件为基于最小二乘支持向量机预测,matlab源代码,内有详细使用教程,特别容易学,使用也简单,结果精度也较高,适合做研究用
  • svmsim.m文件支持向量机预测函数,用于预测 svmmain.m为主程序 svmyiwei.m为一维测试函数主程序 svmerwei.m为二维测试函数主程序 后两者没有涉及到数据归一化,在训练样本与测试样本划分时采用随机的方法,调用了...
  • 高炉炼铁过程的自适应最小二乘支持向量机预测
  • 我国顺酐市场分析及其消费量的支持向量机预测,冯详立,王洪礼,通过对我国1995年至2005年顺酐消费量数据的特征分析,运用支持向量机理论对我国 “十一五”期间的顺酐消费量进行了预测。
  • lncRScan-SVM:使用支持向量机预测长非编码RNA的工具
  • 支持向量机预测线虫基因选择性剪切位点,杨乌日吐,李前忠,基因的选择性剪切使得在DNA上一段相同的序列翻译成两个或两个以上不同的蛋白质序列。在选择性剪切中,供体位点分为选择性供体位点
  • 论文研究-应用支持向量机预测公交车运行时间.pdf,
  • 然后应用了这些特征,并使用train_test_split将数据拆分为train和test:Train data : (60, 772)Test data : (20, 772)Train labels: (60,)Test labels : (20,)接下来我要做的是将支持向量机分类器应用于测试数据集中...

    我从train数据集中的图像中提取了一些特征,然后应用了这些特征,并使用train_test_split将数据拆分为train和test:Train data : (60, 772)

    Test data : (20, 772)

    Train labels: (60,)

    Test labels : (20,)

    接下来我要做的是将支持向量机分类器应用于测试数据集中的图像,并查看结果。在

    ^{pr2}$

    我没有得到很好的准确性,虽然我可以看到它说60%的准确率。然而,大多数图像的标签都不正确。我在prediction中传递了错误的参数吗?在

    我能做些什么来改善这一点?在

    编辑:我尝试过您用下面的代码所说的,但是我得到一个错误,说我应该重塑我的feature_vector。所以我这样做了,然后得到了以下错误。在

    (作为参考:feature_extraction_method(image).shape是(772,)。)for filename in test_images:

    # read the image and resize it to a fixed-size

    img = cv2.imread(filename)

    img = cv2.resize(img, fixed_size)

    feature_vector = feature_extraction_method(img)

    prediction = clf.predict(feature_vector.reshape(-1, 1))

    cv2.putText(img, prediction, (20, 30), cv2.FONT_HERSHEY_TRIPLEX, .7 , (0, 255, 255), 2)

    plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

    plt.show()

    ---------------------------------------------------------------------------

    ValueError Traceback (most recent call last)

    in ()

    19

    20 feature_vector = feature_extraction_method(img)

    ---> 21 prediction = clf.predict(feature_vector.reshape(-1, 1))

    22 cv2.putText(img, prediction, (20, 30), cv2.FONT_HERSHEY_TRIPLEX, .7 , (0, 255, 255), 2)

    23 plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

    /anaconda3/lib/python3.6/site-packages/sklearn/svm/base.py in predict(self, X)

    546 Class labels for samples in X.

    547 """

    --> 548 y = super(BaseSVC, self).predict(X)

    549 return self.classes_.take(np.asarray(y, dtype=np.intp))

    550

    /anaconda3/lib/python3.6/site-packages/sklearn/svm/base.py in predict(self, X)

    306 y_pred : array, shape (n_samples,)

    307 """

    --> 308 X = self._validate_for_predict(X)

    309 predict = self._sparse_predict if self._sparse else self._dense_predict

    310 return predict(X)

    /anaconda3/lib/python3.6/site-packages/sklearn/svm/base.py in _validate_for_predict(self, X)

    457 raise ValueError("X.shape[1] = %d should be equal to %d, "

    458 "the number of features at training time" %

    --> 459 (n_features, self.shape_fit_[1]))

    460 return X

    461

    ValueError: X.shape[1] = 1 should be equal to 772, the number of features at training time

    展开全文
  • 0. 介绍支持向量机,support vector machines,SVM,是一种二分类模型。策略: 间隔最大化。这等价于正则化的合页损失函数最小化问题。学习算法: 序列最小最优化算法SMO分类 线性可分支持向量机,线性支持向量机、非...

    c816cbabcd50d074f91af53f1daf9ef9.png

    0. 介绍

    支持向量机,support vector machines,SVM,是一种二分类模型。

    • 策略: 间隔最大化。这等价于正则化的合页损失函数最小化问题。
    • 学习算法: 序列最小最优化算法SMO
    • 分类 线性可分支持向量机,线性支持向量机、非线性支持向量机。

    1、线性可分支持向量机

    • 特点: 训练数据线性可分;策略为硬间隔最大化;线性分类器。

    模型 分类决策函数:

    分类超平面:

    定义超平面关于样本点

    函数间隔为:

    定义超平面关于样本点

    几何间隔

    几何距离是真正的点到面的距离。 定义所有样本点到面的距离的最小值:

    间隔最大化:对训练集找到几何间隔最大的超平面,也就是充分大的确信度对训练数据进行分类。

    以下通过最大间隔法和对偶法进行实现:

    最大间隔法: 1)构造约束最优化函数

    如果假设函数间隔

    ,易得 上述等价于:

    2)解约束函数,即获得超平面

    对偶法: 对偶算法可以使得问题更容易求解,并且能自然引入核函数,推广非线性分类。 1、定义拉格朗日函数

    优化目标:

    2、求

    分别对
    求偏导数,并令其等于0。

    得:

    3、求

    的极大。 根据2中的结果,

    的极大的对偶问题是:

    求解出

    ,即可得:

    存在一个

    ,使得

    因此,分类决策函数为:

    总结

    感知机模型的定义和SVM一样,但是两者的学习策略不同,感知机是误分类驱动,最小化误分点到超平面距离;SVM是最大化所有样本点到超平面的几何距离,也就是SVM是由与超平面距离最近的点决定的,这些点也称为支持向量

    2、线性支持向量机与软间隔最大化

    • 特点: 训练数据近似可分;策略为软间隔最大化;线性分类器。

    线性不可分指,某些样本点不能满足函数间隔

    的约束条件。 引入松弛因子
    和惩罚参数
    ,得

    优化目标,一方面是使得间隔尽量大,另一方面使得误分点的个数尽量少。 当C趋于无穷大时,优化目标不允许误分点存在,从而过拟合; 当C趋于0时,只要求间隔越大越好,那么将无法得到有意义的解且算法不会收敛,即欠拟合

    学习算法

    1.构建凸二次规划问题:

    2.求得

    存在 $0<alpha_{j}^{*}

    分类决策函数:

    3、非线性支持向量机与核函数

    • 特点: 训练数据线性不可分;学习策略为使用核技巧和软间隔最大化;非线性支持向量机。

    思想: 使用非线性变换,把输入空间对应一个特征空间(希尔伯特空间),把非线性问题转换成线性问题;

    核函数: 定义

    是一个输入空间到特征空间的映射,使得对于所有的输入空间的x, z满足条件:
    其中,
    是核函数;
    是映射函数。 把原来目标函数的
    内积替换成
    .

    正定核:

    是对称函数, 核对应的Gram矩阵半正定。

    常用的核函数: 多项式核函数:

    高斯核函数:

    非线性支持向量分类机学习算法: (1)选取适当的核函数

    和适当的参数C,构造并求解最优化问题:

    求得最优解

    。 (2)选择
    的一个正分量$0<alpha^*

    (3)构建决策函数:

    是正定核函数时,上述是凸二次规划问题,解是存在的。

    4、学习算法:序列最小最优化算法SMO

    4.1 原理

    序列最小最优化SMO算法: 1、通过满足KKT条件,来求解; 2、如果没有满足KKT条件,选择两个变量,固定其他变量,构造二次规划问题。 算法包括,求解两个变量二次规划和选择变量的启发式方法。

    优化目标:

    变量是拉格朗日乘子,一个变量

    对应于一个样本点
    ; 变量的总数等于训练样本的容量N。 SMO是启发式算法,思路是: 固定其他变量,针对其中两个变量构建二次规划问题,通过子问题求解,提高算法计算速度。 这两个变量,一个是违反KKT条件最严重的那个,另一个是由约束条件自动确定。

    两个变量二次规划的求解方法

    其中,

    由于

    要么是1,要么是-1;所以,
    是一个平行于以下正方形对角线的线段。

    3e1be31b1e4175364aaa89fe5489153b.png

    由于,

    ,那么容易知道
    的取值范围: 如果

    如果

    :

    记未考虑

    不等式约束
    ,为
    .

    那么:

    其中,

    为函数
    对输入
    的预测值与真实值
    之差。

    于是:

    4c0b3b6d126a79c40c8f73213cc710ec.png

    其中,

    ,
    取值范围的上下界.

    4.2 算法步骤

    SMO算法在每个子问题中选择两个变量优化,其中至少一个变量是违反KKT条件的。 (1)第一个变量选择 从间隔边界上的支持向量点(

    ),选取不满足KKT条件的点,如果没有,从剩下的点选择。

    KKT条件为:

    35cdc0e7916a7589e21aa0a34a78c460.png

    (2)第二个变量的选择 第二个变量选择使得

    最大。

    其中,

    代表函数 g(x)对输入
    的预测值与真实输出
    之差。

    (3)计算阈值b 和差值

    . 这里更新
    参考上面4.1。

    选择满足条件$0<alpha_{i}^{mathrm{new}}

    (4)预测 根据决策函数:

    可以获得预测样本的标签。

    5、实践

    b1dc21b2d5aab747e342e49f1352d787.png

    下面代码实现有点问题,这里使用了 max_iter作为终止条件,实际上应该是,找到最不符合KKT条件的样本,然后,该样本和剩下样本中挑选一个符合|Ei - Ej|最大的样本,不断重复挑选第二个样本直到目标函数不下降。也就是说,这里是O(n^2)的复杂度。代码展示的是O(n*max_iter)的复杂度,不合理。

    from 

    运行结果:

    acccucy:0.6491
    

    Q:为什么支持向量机不适合大规模数据? 这里,大规模数据指,样本数目和特征数目都很大。

    A:个人理解: Linear核的SVM迭代一次时间复杂度

    , n 为样本数目,k为特征数目,因为计算每个符合KKT条件的样本时,都得遍历剩余的样本来更新参数,直到目标函数不下降。 像LR时间复杂度是
    , LR的样本和权重矩阵相乘(矩阵运算快,我认为可以忽略特征数目)。

    非线性核的SVM:使用非线性特征映射将低维特征映射到高维,使用核技巧计算高维特征之间的内积。

    d8f9ee0f17403ddbf8cba0e3ff6edd8e.png

    由于使用数据集的核矩阵K(

    代表两个样本的核函数值)描述样本之间的相似性,矩阵元素随着数据规模的增大成平方增长。

    参考:

    1. 李航 统计学习方法;
    2. sklearn SVM;
    3. github lihang-code SVM;
    4. 支持向量机(SVM)是否适合大规模数据? - 知乎;
    5. Github kernel-svm/svm.py ;
    展开全文
  • 灰色神经网络与支持向量机预测模型研究,参考文献
  • 分析了遥感月蒸发蒸腾量数据的动态变化趋势,把一维遥感月蒸发蒸腾量输入空间映射到高维输入空间,将蒸发蒸腾量时间序列重构为12维相空间,建立了基于支持向量机的蒸发蒸腾量预测模型。根据预测精度,确定了损失系数ε、...
  • 以工程实测数据作为学习样本,利用遗传算法优化支持向量机参数,建立了煤矿立井井筒非采动破裂的遗传-支持向量机预测模型,并对工程实例进行测试。研究结果表明,该模型预测精度高,回判估计的错误率低,为快速准确地预测...
  • 1)线性可分支持向量机(也称硬间隔支持向量机):当训练数据线性可分是,通过硬间隔最大化,学得一个线性可分支持向量机2)线性支持向量机(也称为软间隔支持向量机):当训练数据近似线性可分时,通过软间隔最大化,学...

    支持向量机(Support Vector Machine,SVM)的基本模型是定义在特征空间上间隔最大的线性分类器。它是一种二类分类模型,当采用了核技巧之后,支持向量机可以用于非线性分类。

    1)线性可分支持向量机(也称硬间隔支持向量机):当训练数据线性可分是,通过硬间隔最大化,学得一个线性可分支持向量机

    2)线性支持向量机(也称为软间隔支持向量机):当训练数据近似线性可分时,通过软间隔最大化,学得一个线性支持向量机

    3)非线性支持向量机:当训练数据不可分时,通过使用核技巧以及软间隔最大化,学得一个非线性支持向量机。

    1、线性可分支持向量机

    输入:线性可分训练数据集T

    输出:最大几何间隔的分离超平面和分类决策函数

    算法步骤:

    1)构造并且求解约束优化问题,求得最优解w*,b*

    2)由此得到分离超平面,以及分类决策函数

    若训练数据集T线性可分,最大间隔分离超平面存在且唯一

    下面是线性可分支持向量机学习算法的对偶算法:

    输入:线性可分训练数据集T

    输出:最大集合间隔的分离超平面和分类决策函数

    算法步骤:

    1)构造并且求解约束最优化问题,求得最优解α*

    2)计算w*,同时选择α*的一个正的分量αj*>0,计算b*

    3)由此得到最大集合间隔分离超平面和分类决策函数

    2、线性支持向量机

    对于线性不可分训练数据,线性支持向量机不再适用,但可以将它扩展到线性不可分问题

    线性支持向量机学习算法的对偶算法:

    输入:训练数据集T,惩罚参数C>0

    输出:软间隔最大化分离超平面和分类决策函数

    算法步骤:

    1)求解约束优化问题,求得最优解α*

    2)计算w*,b*

    3)由此得到软间隔最大化分离超平面以及分类决策函数\

    实验代码:

    1 importmatplotlib.pyplot as plt2 importnumpy as np3 from sklearn importdatasets,linear_model,cross_validation,svm4

    5 defload_data_regression():6 diabetes=datasets.load_diabetes()7 return cross_validation.train_test_split(diabetes.data,diabetes.target,test_size=0.25,random_state=0)8

    9 defload_data_classfication():10 iris=datasets.load_iris()11 X_train=iris.data12 Y_train=iris.target13 return cross_validation.train_test_split(X_train,Y_train,test_size=0.25,random_state=0,stratify=Y_train)14

    15 def test_LinearSVC(*data):16 X_train,X_test,Y_train,Y_test=data17 cls=svm.LinearSVC()18 cls.fit(X_train,Y_train)19 print("Coefficients:%s,intercept %s"%(cls.coef_,cls.intercept_))20 print("Score:%.2f"%cls.score(X_test,Y_test))21

    22 X_train,X_test,Y_train,Y_test=load_data_classfication()23 test_LinearSVC(X_train,X_test,Y_train,Y_test)

    View Code

    实验结果:

    在测试集上的预测准确率达到了0.97,还是非常高的

    3、非线性支持向量机

    核函数将输入空间中的任意两个向量x,z映射为特征空间中对应的向量之间的内积。在给定核函数K(x,z)的情况下,可以利用求解线性分类问题的方法求解非线性分类问题的支持向量机。

    在实际应用中,往往依赖经验直接选择核函数,然后验证该核函数确实是有效的核函数。常用的核函数如下:

    1)多项式核函数   2)高斯核函数  3)sigmoid核函数

    输入:训练数据集T,惩罚参数C

    输出:分类决策函数

    算法步骤:

    1)选择适当的核函数K,求解约束最优化问题,求得最优解α*

    2)计算w*和b*

    3)构造分类决策函数

    实验代码:

    1 importmatplotlib.pyplot as plt2 importnumpy as np3 from sklearn importdatasets,linear_model,cross_validation,svm4

    5 defload_data_regression():6 diabetes=datasets.load_diabetes()7 return cross_validation.train_test_split(diabetes.data,diabetes.target,test_size=0.25,random_state=0)8

    9 defload_data_classfication():10 iris=datasets.load_iris()11 X_train=iris.data12 Y_train=iris.target13 return cross_validation.train_test_split(X_train,Y_train,test_size=0.25,random_state=0,stratify=Y_train)14

    15 def test_LinearSVC(*data):16 X_train,X_test,Y_train,Y_test=data17 cls=svm.LinearSVC()18 cls.fit(X_train,Y_train)19 print("Coefficients:%s,intercept %s"%(cls.coef_,cls.intercept_))20 print("Score:%.2f"%cls.score(X_test,Y_test))21

    22 def test_SVC_linear(*data): #non-linear svm,kernel is linear

    23 X_train,X_test,Y_train,Y_test=data24 cls=svm.SVC(kernel="linear")25 cls.fit(X_train,Y_train)26 print("Score:%.2f"%cls.score(X_test,Y_test))27 X_train,X_test,Y_train,Y_test=load_data_classfication()28 #test_LinearSVC(X_train,X_test,Y_train,Y_test)

    29 test_SVC_linear(X_train,X_test,Y_train,Y_test)

    View Code

    实验结果:

    可以看到线性核要比线性分类支持向量机LinearSVC的预测效果更佳,对测试集的预测全部正确

    4、支持向量回归(Support Vector Regression,SVR)

    (1)线性回归SVR

    实验代码:

    1 importmatplotlib.pyplot as plt2 importnumpy as np3 from sklearn importdatasets,linear_model,cross_validation,svm4

    5 defload_data_regression():6 diabetes=datasets.load_diabetes()7 return cross_validation.train_test_split(diabetes.data,diabetes.target,test_size=0.25,random_state=0)8

    9 def test_LinearSVR(*data):10 X_train,X_test,Y_train,Y_test=data11 regr=svm.LinearSVR()12 regr.fit(X_train,Y_train)13 print("Score:%.2f"%regr.score(X_test,Y_test))14

    15 X_train,X_test,Y_train,Y_test=load_data_regression()16 test_LinearSVR(X_train,X_test,Y_train,Y_test)

    View Code

    实验结果:

    可以看到线性回归支持向量机的预测性能较差,score值为负值。

    (2)非线性回归SVR

    实验代码:

    1 importmatplotlib.pyplot as plt2 importnumpy as np3 from sklearn importdatasets,linear_model,cross_validation,svm4

    5 defload_data_regression():6 diabetes=datasets.load_diabetes()7 return cross_validation.train_test_split(diabetes.data,diabetes.target,test_size=0.25,random_state=0)8

    9 def test_SVR_linear(*data):10 X_train, X_test, Y_train, Y_test =data11 regr = svm.SVR(kernel="linear")12 regr.fit(X_train, Y_train)13 print("Score:%.2f" %regr.score(X_test, Y_test))14

    15 X_train,X_test,Y_train,Y_test=load_data_regression()16 test_SVR_linear(X_train,X_test,Y_train,Y_test)

    View Code

    实验结果:

    线性核要比线性回归支持向量机LinearSVR的预测效果更好,但是依然是负值。并且采用poly、rbf、sigmoid函数,以及采用不同的参数,发现其预测的准确率都不是很高,峰值大概在0.6左右。可见支持向量机在回归问题上的表现并不突出

    5、SVM的优缺点

    SVM本质上是非线性方法,在样本量很少时,容易抓住数据和特征之间的非线性关系,因此可以解决非线性问题、可以避免神经网络结构选择和局部极小点问题、可以提高泛化性能、可以解决高维问题

    SVM对缺失数据敏感,对非线性问题没有通用解决方案,必须谨慎选择核函数来处理,计算复杂度高。

    展开全文
  • 支持向量机(SVM)的任务就是要找到具有“最大间隔”划分超平面,也就是最小化||w||的平方,从而使得划分超平面所产生的分类结果是最鲁棒的:SVM的数学模型1.2 优缺点支持向量机专注于寻找最优分界线,用...

    2c4198e7fb63a5449e217d222f010133.png

    c080936b1bd1c48dfed580435643f1c2.png
    本文结构

    1. 介绍

    4780bca9e09e770cdcef21e357a8e57a.png
    支持向量机

    1.1 基本概念

    超平面:wx+b = 0,也就是分类的决策边界。

    支持向量:x1,x2,x3等,指离分隔超平面最近的那些点。

    间隔:两个异类支持向量到超平面的距离之和。

    支持向量机(SVM)的任务就是要找到具有“最大间隔”划分超平面,也就是最小化||w||的平方,从而使得划分超平面所产生的分类结果是最鲁棒的:

    0b3bd5780278a5a8c1fcc3a794d96ba7.png
    SVM的数学模型

    1.2 优缺点

    支持向量机专注于寻找最优分界线,用于减少过拟合。Kernel Trick的应用使得支持向量机可以高效的用于非线性可分的情况。

    优点:理论非常完美;支持不同的kernel,用于调参

    • 模型只需要保存支持向量, 模型占用内存少, 预测快
    • 分类只取决于支持向量, 适合数据的维度高的情况, 例如DNA数据

    缺点:当数据量特别大时,训练速度特别慢

    • 训练的时间复杂度为高, 当数据量巨大时候不合适使用。
    • 需要做调参 C 当数据量大时非常耗时间.

    2. 求解模型

    2.1 异常值处理

    在处理数据时,可能会遇到在划分好的领域中出现了一两个异常值的情况:

    2706d00fa4e593958dfdbd716094bf2f.png
    左半部分的蓝点为异常值

    我们通常会加入松弛变量:

    dd6730dffd2255d0137e5267649d6690.png

    我们希望存在一个超平面能将不同类的样本完全划分开,但在现实生活中往往不能实现。这时,可以采用软间隔的方法,允许支持向量机在一些样本上出错。

    869604d6eef8d288c3f1ea5f9088db96.png
    带有松弛变量的SVM数学模型

    这样,即使有点在虚线范围内,我们也可以算出w,b的值

    我们将上式进行变形,得到合页损失函数的数学模型:

    0d114e75db2399b8c1551d1d6430b6ec.png

    d400fc008ba89e0cc5521eff649c2e70.png
    各种函数图像对比

    合页损失函数的特性:

    • 凸函数,容易优化
    • 在自变量小于0的部分,梯度比较小(-1),对错误分类的惩罚比较轻。
    • 在自变量等于0处不可导,需要分段求导。
    • 在自变量大于等于1的部分,值都为0。只要对某个数据分类是正确的,并且正确的可能性足够高,那么就不用针对这个数据进一步优化了。
    • 在求解最优化时,只有支持向量会参与确定分界线,而且支持向量的个数远远小于训练数据的个数。

    2.2 求解支持向量机

    计算w,b,我们有两种方法:

    • 二次规划(Quadratic Programming):经典运筹学的最优化问题,可以在多项式时间内求得最优解。
    • 转换为对偶问题:引入核函数处理,主要解决非线性分类问题,

    3. 扩展SVM到支持多个类别

    我们之前都是在处理二分类问题,若需要处理多个类别的问题,一般有两种方法:

    3.1 OVR(one versus rest)

    对于k个类别的情况,训练k个SVM,第j个SVM用于判断任意条数据是属于类别j还是属于类别非j。预测的时候,具有最大值1. 扩展SVM到支持多个类别

    dc701534a2523ca557a242b2f2c40101.png
    OVR

    3.2 OVO(one versus one)

    对于k个类别的情况,训练k*(k-1)/2个SVM,每一个SVM只用于判读任意条数据是属于k中的特定两个类别。预测的时候,使用k*(k-1)/2个SVM做k*(k-1)/2次预测,使用计票的方式决定数据被分类为哪个类别的次数最多,就认为数据x属于此类别。

    76a85c283a110143245287b734450e3a.png
    OVO

    4. 实战:识别有毒蘑菇

    a4a6e39021adc2e67401255b271c6efd.png
    分析思路

    4.1 数据下载

    Mushroom Data Setarchive.ics.uci.edu

    4.2 导入数据

    import pandas as pd
    import numpy as np
    pd.set_option('max_column',100)
    # 导入数据
    mush_df = pd.read_csv('mushrooms.csv')
    mush_df.head()
    mush_df_encoded.shape

    e80ab1fd3da746388443bb4f23dc7859.png
    数据的前五行

    数据集中每一条数据包含许多特征, 这些特征包括对蘑菇形状, 质地, 色彩等特征的描述, 我们需要以此判断蘑菇是否有毒(p)或者可以吃(e). 为两个类别的分类问题.

    数据形式转换:

    c78fb4f630c5cc19c31d07ec82d71ef9.png
    进行0、1编码

    并查看矩阵的大小:(8124,119)

    4.3 训练SVM

    建立pipeline,PCA&SVC

    PCA(主成分分析):将数据进行降维处理, 然后将降维后的向量作为支持向量机的输入. PCA降维的目的可以看作是特征提取, 将数据里面真正对分类有决定性影响的数据提取出来。

    SVC:参数设置,C指目标函数的惩罚系数C,用来平衡分类间隔margin和错分样本的,默认值C = 1.0。gamma指核函数的系数('Poly', 'RBF' and 'Sigmoid'), 默认是gamma = 1 / n_features

    #导入SVC、PCA、pipeline的库
    from sklearn.svm import SVC
    from sklearn.decomposition import PCA
    from sklearn.pipeline import make_pipeline
    
    # 设置参数
    pca = PCA(n_components=50)  #将数据转换为一个长度为50的向量
    svc = SVC(gamma='auto')
    model = make_pipeline(pca, svc)

    调参:通过交叉验证寻找最佳的 C (控制间隔的大小)

    #将数据分为训练数据和测试数据
    from sklearn.model_selection import train_test_split
    Xtrain, Xtest, ytrain, ytest = train_test_split(X_mush, y_mush,test_size=0.3,random_state=41)
    from sklearn.model_selection import GridSearchCV
    
    # 在C的范围1-20中进行选择
    param_grid = {'svc__C':range(1,20)}
    #estimator指所使用的分类器,或者pipeline,
    #param_grid:值为字典或者列表,即需要最优化的参数的取值
    #cv:交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield训练/测试数据的生成器。
    grid = GridSearchCV(estimator=model,param_grid=param_grid,cv=5)
    
    #打印时间和最佳C的取值
    %time grid.fit(Xtrain, ytrain)
    print(grid.best_params_)

    074919eb8df8df96fe62149b777053bd.png

    4.4 使用训练好的SVM做预测

    #将C参数的值设为10
    model =SVC(C=10,gamma='auto')
    yfit = model.fit(Xtrain,ytrain)

    4.5 生成性能报告

    from sklearn.metrics import classification_report
    ypred=yfit.predict(Xtest)
    print(classification_report(ytest,ypred))

    1eed40f706440802f6558d95264acea8.png

    可以看出,准确率为100%,可能是数据的问题,一般SVM的训练结果达不到这么高的准确率。

    完整代码:

    #导入读取数据的库
    import pandas as pd
    import numpy as np
    pd.set_option('max_column',100)
    
    # 导入数据
    mush_df = pd.read_csv('mushrooms.csv')
    
    # 将值从字母转换为0,1形式
    mush_df_encoded = pd.get_dummies(mush_df)
    
    # 将特征和类别标签分布赋值给 X 和 y
    X_mush = mush_df_encoded.iloc[:,2:]
    y_mush = mush_df_encoded.iloc[:,1]
    
    #导入SVC、PCA、pipeline的库
    from sklearn.svm import SVC
    from sklearn.decomposition import PCA
    from sklearn.pipeline import make_pipeline
    
    # 设置参数
    pca = PCA(n_components=50)  #将数据转换为一个长度为50的向量
    svc = SVC(gamma='auto')
    model = make_pipeline(pca, svc)
    
    #将数据分为训练数据和测试数据,其中,测试数据为30%
    from sklearn.model_selection import train_test_split
    Xtrain, Xtest, ytrain, ytest = train_test_split(X_mush, y_mush,test_size=0.3,random_state=41)
    
    from sklearn.model_selection import GridSearchCV
    
    # 在C的范围1-20中进行选择
    param_grid = {'svc__C':range(1,20)}
    #estimator指所使用的分类器,或者pipeline,
    #param_grid:值为字典或者列表,即需要最优化的参数的取值
    #cv:交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield训练/测试数据的生成器。
    grid = GridSearchCV(estimator=model,param_grid=param_grid,cv=5)
    
    #将C参数的值设为10
    model =SVC(C=10,gamma='auto')
    yfit = model.fit(Xtrain,ytrain)
    
    from sklearn.metrics import classification_report
    ypred=yfit.predict(Xtest)
    
    print(classification_report(ytest,ypred))
    展开全文
  • 在分析煤层含气量影响因素的基础上,采用基于小样本理论的支持向量机(SVM)回归方法,建立了预测煤层含气量的计算模型。通过对沁水盆地南部目标煤层含气量影响因素分析,建立了煤变质程度、储层压力、温度及煤质特征支持...
  • 支持向量机预测中药水提液膜分离过程,研究用支持向量机分类、遗传神经网络于中药水提液膜中属性筛选。
  • 建立了基于支持向量机(Support Vector Machine,SVM)的煤自燃极限参数预测模型;经过与多项式函数及Sigmoid核函数的对比,选用径向基函数作为SVM核函数;提出了一种SVM参数优化的变步长搜索方法,先在一个大区域根据训练...
  • 与粒子群优化参数的支持向量回归(PSO-SVR)模型、广义回归神经网络(GRNN)模型进行比较,IPSO-SVR模型预测效果明显优于PSO-SVR和GRNN模型,可用于瓦斯涌出量的实际预测,表明所提出的IPSO算法是选取SVR参数的有效方法。
  • 作为一种新的机器学习方法,支持向量机的参数选择没有一个统一的模式和标准。为了克服这一缺点,对遗传算法进行改进,构造一种混沌云自适应模拟退火遗传算法(CCASAGA)对支持向量机回归参数进行优化。该算法将混沌...
  • 支持向量机:寻找最佳分隔的超平面(上图的Decision Hyperplane)。在当前空间中寻找的最佳分隔超平面不理想,可以通过映射函数将数据从原空间映射到高维空间去寻找,但这样运算量增加很多,为减少运算量,引入...
  • 基于包钢6号高炉的在线生产数据,首先建立铁水硅含量序列的自回归AR(p)模型,分析其滞后阶数...最后建立铁水硅含量的支持向量机回归预测模型。该模型对炉温预测的准确度达到88.2%,对在线监测高炉炉温具有一定的实用价值。
  • SVM--简介支持向量机(Support Vector Machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。在机器学习领域,是一个有监督的学习...
  • 讲述关于支持向量机的文章,用于预测预报的文章
  • 嵌入具有分类预测功能的支持向量机(SVM),同时引入莱维飞行全局搜索更新狼群位置,优化SVM核函数参数γ和惩罚因子C,构建了HGWO-SVM预测算法预测推焦车大车道内物体的运动轨迹。结果表明,与已有算法相比,该算法对行人、...
  • 为了提高最小二乘支持向量机预测结果,文章用灰狼优化算法对其参数寻优,建立软件老化预测模型。通过实验证明了该模型,对软件老化的预测表现出很好的效果。 遗留在软件中的缺陷会随软件系统长期持续运行造成...
  • 代码如下:# -*- coding: utf-8 -*- """ Created on Tue May 15 17:23:42 2018 @author: eagle ""...# =============================...# 不同核函数的支持向量机预测波士顿房价 # ========...
  • 我认为问题是数据被分成训练和测试的方式。您已经采集了前3000个样本用于培训,剩下的190个样本用于测试。我发现,通过这样的训练,分类器可以为所有测试样本生成真正的类标签(score=1.0)。我还注意到,数据集的最后...
  • 一、支持向量机支持向量机是一种监督学习的二分类模型,其主要目的是找到一种超平面对样本数据进行分割,从而转化为求解凸二次规划的问题。然而在大部分的分类任务中,一般无法使用一种线性关系将两种分类实例分割,...
  • 然后使用支持向量机(SVM)来帮助评估PCR结果。 为了检查我们的预测变量的预期成功率,采用折刀交叉验证测试。 我们方法的整体准确性达到93.12%,敏感性,特异性和MCC分别为94.68%,9158%和0.863%。
  • 为了解决传统的有机碳含量TOC测量方法成本高和无法获得TOC含量连续分布的问题,提出了一种TOC含量的统计预测方法。由于地层的岩性的不同,TOC含量的差异非常大,因此,首先对原始的测井数据聚类,通过聚类的方法将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,626
精华内容 1,050
关键字:

支持向量机预测