美文网首页程序员@IT·互联网爬虫专题
sklearn调包侠之支持向量机

sklearn调包侠之支持向量机

作者: 罗罗攀 | 来源:发表于2018-07-04 10:31 被阅读138次

    算法原理

    对于支持向量机原理,可参考该系列博客(https://www.cnblogs.com/pinard/p/6111471.html)。

    实战——乳腺癌检测

    数据导入

    本次实战使用前文中的乳腺癌数据集,如图所示。

    from sklearn.datasets import load_breast_cancer
    cancer = load_breast_cancer()
    print(cancer.DESCR)
    
    切分数据集
    X = cancer.data
    y = cancer.target
    
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=33)
    
    模型训练与评估

    支持向量机算法使用sklearn.svm 模块中的SVC方法。常用的参数如下:

    • C:默认为1.0,是对于错误的惩罚项。
    • kernel:指定算法的核函数,默认为'rbf',常用的有'linear','poly','rbf','sigmoid','precomputed'。
    • degree:多项式核函数的次数('poly'),默认为3。 其他核函数会将其忽略。
    • gamma:'rbf','poly'和'sigmoid'的核系数。 如果gamma是'auto',那么将使用1 / n_features。

    这里的数据较小,使用高斯核函数很容易过拟合:

    from sklearn.svm import SVC
    clf = SVC(C=1.0, kernel='rbf', gamma=0.1)
    clf.fit(X_train, y_train)
    clf.score(X_train, y_train)
    clf.score(X_test, y_test)
    
    # result
    # 1.0
    # 0.6228070175438597
    

    当然我们也可以通过网格搜索获得适合的gamma值。

    import numpy as np
    from sklearn.model_selection import GridSearchCV
    
    param_grid = {'gamma':np.linspace(0, 0.0003, 30)}
    clf = GridSearchCV(SVC(), param_grid, cv=5)
    clf.fit(X, y)
    print(clf.best_params_, clf.best_score_)
    
    # result
    # {'gamma': 0.00011379310344827585} 0.936731107206
    

    最后,使用多项式核函数拟合:

    clf = SVC(C=1.0, kernel='poly', degree=2)
    clf.fit(X_train, y_train)
    train_score = clf.score(X_train, y_train)
    test_score = clf.score(X_test, y_test)
    print(train_score, test_score)
    
    # result
    # 0.98021978022 0.964912280702
    

    相关文章

      网友评论

      本文标题:sklearn调包侠之支持向量机

      本文链接:https://www.haomeiwen.com/subject/pdosuftx.html