SVM算法实例

机器学习算法完整版见fenghaootong-github

MINST for SVM

导入模块

from sklearn import svm
import pandas as pd
import time

导入数据

df = pd.read_csv('../DATA/train.csv')
labels = df.as_matrix(columns=['label'])#find lable to transform to matrix
dataset = df.drop('label', axis=1).as_matrix()#transform dataset to matrxi without drop lable 
dataset = dataset / (28.0*28.0)
int(len(labels.ravel()) * 0.75)
31500

数据分为训练和验证集

train_len = int(len(labels.ravel()) * 0.75)
train_dataset = dataset[:train_len]
train_labels = labels[:train_len]
valid_dataset = dataset[train_len:]
valid_labels = labels[train_len:]
train_labels.ravel()
array([1, 0, 1, ..., 2, 9, 5])

模型训练

t0 = time.time()
clf = svm.SVC(C=10000.0,kernel='rbf')
clf.fit(train_dataset, train_labels.ravel())
print("train-time:",round(time.time() - t0, 3), "s")
train-time: 115.624 s

模型预测

predictions = [int(a) for a in clf.predict(valid_dataset)]
#predictions
sum = 0
for a, y in zip(predictions, valid_labels.ravel()):
    if a == y:
        sum = sum + 1
print ("%s of %s test values correct.\ntest accuracy: %f" % (sum, len(valid_labels.ravel()), sum / len(valid_labels.ravel())))
950 of 1050 test values correct.
test accuracy: 0.904762

换参比较

def svm_baseline(kernel):
    sum = 0
    t0 = time.time()
    clf = svm.SVC(C=10000.0,kernel=kernel)
    clf.fit(train_dataset, train_labels.ravel())
    print("train-time:",round(time.time() - t0, 3), "s")
    predictions = [int(a) for a in clf.predict(valid_dataset)]
    for a, y in zip(predictions, valid_labels.ravel()):
        if a == y:
            sum = sum + 1
    print ("%s of %s test values correct.\ntest accuracy: %f" % (sum, len(valid_labels.ravel()), sum / len(valid_labels.ravel())))
kernels = ['rbf','linear']
for kernel in kernels:
    svm_baseline(kernel)
train-time: 2.6730403900146484 s
951 of 1050 test values correct.
test accuracy: 0.905714
train-time: 2.0404305458068848 s
950 of 1050 test values correct.
test accuracy: 0.904762

SVM参数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值