学习svm的时候,看了几个大牛的代码,代码中调了几个函数库,在此记录下来,方便以后的学习。
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、kernel、degree、gramma、coef0。
这里用一段代码展示效果:
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)
sns.set(context="notebook", style="dark", palette=sns.diverging_palette(240, 10, n=2))
1.darkgrid(灰色网格)
2.whitegrid(白色网格)
3.dark(黑色)
4.white(白色)
5.ticks(十字叉)
sns.palplot(sns.diverging_palette(220, 20, n=7))
sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=7))
sns.palplot(sns.diverging_palette(10, 220, sep=80, n=7))
sns.palplot(sns.diverging_palette(255, 133, l=60, n=7, center="dark"))
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
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)
要运行的最大迭代次数。