学习SVM中碰到的函数

学习svm的时候,看了几个大牛的代码,代码中调了几个函数库,在此记录下来,方便以后的学习。

一、sklearn.svm.SVC

sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, 
                probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, 
                max_iter=-1, decision_function_shape=None,random_state=None)

参数:

  • C:惩罚参数,默认值是1.0
    C越大,表示对误分类的惩罚变大,算法更想将训练集全分对,这样对训练集测试时准确率很高,可能会过拟合,泛化能力弱;C越小,表示对误分类的惩罚变小,允许容错,可能会欠拟合,泛化能力强。
  • kernel:核函数,默认是rbf
    ‘linear’:线性
    ‘poly’:多项式
    ‘sigmoid’:
    ‘precomputed’:
    ‘rbf’:像正太分布,但是和正太分布没什么关系
  • gamma : ‘rbf’、‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features。
  • coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。
  • shrinking :是否采用shrinking heuristic方法,默认为true
  • probability :是否采用概率估计?.默认为False
  • tol :停止训练的误差值大小,默认为1e-3
  • cache_size :核函数cache缓存大小,默认为200
  • class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)
  • verbose :允许冗余输出?
  • max_iter :最大迭代次数。-1为无限制。
  • decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3
  • random_state :数据洗牌时的种子值,int值

上面的值中用的最多的有:C、kernel、degree、gramma、coef0。

二、sklearn: predict和predict_proba

这里用一段代码展示效果:

from sklearn.linear_model import LogisticRegression
import numpy as np
x_train = np.array([[1,2,3],
                    [1,3,4],
                    [2,1,2],
                    [4,5,6],
                    [3,5,3],
                    [1,7,2]])
y_train = np.array([0, 0, 0, 1, 1, 1])
x_test = np.array([[2,2,2],
                   [3,2,6],
                   [1,7,4]])
clf = LogisticRegression()
clf.fit(x_train, y_train)
# 返回预测标签
clf.predict(x_test)
array([1, 0, 1])
# 返回预测属于某标签的概率
clf.predict_proba(x_test)
array([[ 0.43348191, 0.56651809],
       [ 0.84401838, 0.15598162],
       [ 0.13147498, 0.86852502]])

预测[2,2,2]的标签是0的概率为0.43348191,1的概率为0.56651809

预测[3,2,6]的标签是0的概率为0.84401838,1的概率为0.15598162

预测[1,7,4]的标签是0的概率为0.13147498,1的概率为0.86852502

probas = clf.predict(x_test)

predict_proba返回的是一个n行k列的数组(probas),n是数据集的数据量,k是标签数。

probas[: , j]打印出来的是每个数据对标签j预测出的概率

三、数据可视化seaborn

sns.set(context="notebook", style="dark", palette=sns.diverging_palette(240, 10, n=2))
seaborn中有五种可供选择的主题:

 1.darkgrid(灰色网格)
 2.whitegrid(白色网格)
 3.dark(黑色)
 4.white(白色)
 5.ticks(十字叉)

sns.diverging_palette的意义:
sns.palplot(sns.diverging_palette(220, 20, n=7))

在这里插入图片描述

sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=7))

在这里插入图片描述
sep参数控制面板中间区域的两个渐变的宽度:

sns.palplot(sns.diverging_palette(10, 220, sep=80, n=7))

在这里插入图片描述
也可以用中间的色调来选择调色,而不是用亮度:

sns.palplot(sns.diverging_palette(255, 133, l=60, n=7, center="dark"))

在这里插入图片描述

四、Pandas:DataFrame对象的基础操作

import pandas as pd
import numpy as np

df = pd.DataFrame([1, 2, 3, 4, 5], columns=['cols'], index=['a','b','c','d','e'])
print df
    cols
a     1
b     2
c     3
d     4
e     5
df2 = pd.DataFrame([[1, 2, 3],[4, 5, 6]], columns=['col1','col2','col3'], index=['a','b'])
print df2
   col1  col2  col3
a     1     2     3
b     4     5     6
df3 = pd.DataFrame(np.array([[1,2],[3,4]]), columns=['col1','col2'], index=['a','b'])
print df3
   col1  col2
a     1     2
b     3     4
df4 = pd.DataFrame({'col1':[1,3],'col2':[2,4]},index=['a','b'])
print df4
   col1  col2
a     1     2
b     3     4

创建DataFrame对象的数据可以为列表,数组和字典,列名和索引为列表对象。
更多操作详见:https://blog.csdn.net/u014281392/article/details/75331570

五、sklearn.svm.LinearSVC

from sklearn import svm
svc = svm.LinearSVC(C=1, loss='hinge', max_iter=1000)
# 接下来与SVM函数一样正常训练即可
svc.fit(data[['X1', 'X2']], data['y'])
svc.score(data[['X1', 'X2']], data['y'])

与参数kernel ='linear’的SVC类似,但是以liblinear而不是libsvm的形式实现,因此它在惩罚和损失函数的选择方面具有更大的灵活性,并且应该更好地扩展到大量样本。

此类支持密集和稀疏输入,并且多类支持根据one-vs-the-rest方案处理。

Sklearn.svm.LinearSVC(penalty=’l2’, loss=’squared_hinge’, dual=True, tol=0.0001, C=1.0, multi_class=’ovr’,fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)

  • penalty : string, ‘l1’ or ‘l2’ (default=’l2’)
    指定惩罚中使用的规范。 'l2’惩罚是SVC中使用的标准。 'l1’导致稀疏的coef_向量。

  • loss : string, ‘hinge’ or ‘squared_hinge’ (default=’squared_hinge’)
    指定损失函数。 “hinge”是标准的SVM损失(例如由SVC类使用),而“squared_hinge”是hinge损失的平方。

  • dual : bool, (default=True)
    选择算法以解决双优化或原始优化问题。 当n_samples> n_features时,首选dual = False。

  • tol : float, optional (default=1e-4)
    公差停止标准

  • C : float, optional (default=1.0)
    错误项的惩罚参数

  • multi_class : string, ‘ovr’ or ‘crammer_singer’ (default=’ovr’)
    如果y包含两个以上的类,则确定多类策略。 “ovr”训练n_classes one-vs-rest分类器,而“crammer_singer”优化所有类的联合目标。 虽然crammer_singer在理论上是有趣的,因为它是一致的,但它在实践中很少使用,因为它很少能够提高准确性并且计算成本更高。 如果选择“crammer_singer”,则将忽略选项loss,penalty和dual。

  • fit_intercept : boolean, optional (default=True)
    是否计算此模型的截距。 如果设置为false,则不会在计算中使用截距(即,预期数据已经居中)。

  • intercept_scaling : float, optional (default=1)
    当self.fit_intercept为True时,实例向量x变为[x,self.intercept_scaling],即具有等于intercept_scaling的常量值的“合成”特征被附加到实例向量。 截距变为intercept_scaling *合成特征权重注意! 合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。

  • class_weight : {dict, ‘balanced’}, optional
    将类i的参数C设置为SVC的class_weight [i] * C. 如果没有给出,所有课程都应该有一个重量。 “平衡”模式使用y的值自动调整与输入数据中的类频率成反比的权重,如n_samples /(n_classes * np.bincount(y))

  • verbose : int, (default=0)
    启用详细输出。 请注意,此设置利用liblinear中的每进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。

  • random_state : int, RandomState instance or None, optional (default=None)
    在随机数据混洗时使用的伪随机数生成器的种子。 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。

  • max_iter : int, (default=1000)
    要运行的最大迭代次数。

你可能感兴趣的:(python,机器学习)