sklearn SVM学习

刚学完SVM的理论部分,感觉没有老师带着写代码练手,还是发虚。

参照之前的线性回归部分代码,改下模型试验下。

前面 部分跟之前一样,就不贴了。还是文本分词后,用TFIDF矩阵。

因为多分类的问题,svm的参数需要decision_function_shape='ovr',如果不设置会报错。

模型主要参数有:

C超参数:

对于训练集来说,其误差越小,但是很容易发生过拟合;C越小,则允许有更多的训练集误分类,相当于soft margin

核函数:

    kernel :可选线性、rbf 等。rbf就是当数据在低维空间中不可分割的时候,可以尝试将它们映射到高维空间,通过核函数来进行这样的映射操作。

gama 也可以指定

这个参数很多,速度明显比之前的逻辑回顾慢了很多。之前的2W条数据,我本机跑10多分钟就可以了。换成svm的rbf模式,要跑半小时。

如果我参照网上的大神的帖子去走网格查询。

from sklearn.model_selection import GridSearchCV
# 屏蔽警告信息
import warnings
warnings.filterwarnings("ignore")

# 最优超参数组合列表
params = [
        {'kernel': ['rbf'], 'C': [1, 10, 100, 100], 'gamma':[1, 0.1, 0.01, 0.001]}
        ]

model = GridSearchCV(svm.SVC(probability=True,decision_function_shape='ovr'), 
                        params,
                        refit=True,
                        return_train_score=True,        # 后续版本需要指定True才有score方法  
                        cv=5)
model.fit(X_train, y_train)

# GridSearchCV的属性
print('Attrabutes:vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv')
print('cv_results_:',model.cv_results_.keys())
print('Desc:',model.cv_results_['params'][2], model.cv_results_['mean_train_score'][2], 
      model.cv_results_['mean_test_score'][2],model.cv_results_['rank_test_score'][2])
print('best_estimator_:',model.best_estimator_) 
print('best_params_:',model.best_params_) 
print('best_params_:', model.cv_results_['params'][model.best_index_])
print('best_score_:',model.best_score_)
print('scorer_:',model.scorer_)
print('n_splits_:',model.n_splits_)

这个我本机跑了一个多小时都没出结果。太慢了。

后面打算用Java版本的libsvm试试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值