上一篇简单的用sklearn里面的SVM训练数据,本次按照机器学习实战里面的简易版的SMO来训练数据。
详细代码如下:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.utils import check_random_state
from sklearn import datasets
#load data
def loadData():
iris = datasets.load_iris()
rng = check_random_state(42)
perm = rng.permutation(iris.target.size)
iris_data = iris.data[perm]
data = []
for i in iris_data:
data.append(i[:2])#选择前两个特征作为本次训练的基本特征
iris_target = iris.target[perm]
#将label分为+1('Iris-setosa') 和 -1('Iris-versicolor'和'Iris-virginica')
iris_target = np.where((iris_target == 1) |(iris_target == 2), -1, 1)
return data, iris_target
#随机选择一个alpha
def selectJrand(i, m):
j = i
while j == i:
j = int(np.random.uniform(0, m))
return j