Scikit-Learn 机器学习笔记 – SVM
import numpy as np
def load_dataset():
from sklearn import datasets
iris = datasets.load_iris()
X = iris['data'][:, (2, 3)]
y = (iris['target'] == 2).astype(np.float64)
return X, y
def linear_svm_classify(X, y):
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
scale = StandardScaler()
X_scaled = scale.fit_transform(X.astype(np.float64))
svm_clf = LinearSVC(C=1, loss='hinge')
svm_clf.fit(X_scaled, y)
predict = svm_clf.predict([[5.5, 1.7]])
print('线性SVM二分类器预测为:', predict)
def nonlinear_svm_classify(X, y):
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.svm import LinearSVC
poly_features = PolynomialFeatures(degree=3)
X_poly = poly_features.fit_transform(X.astype(np.float64))
scale = StandardScaler()
X_scaled = scale.fit_transform(X_poly)
poly_svm_clf = LinearSVC(C=10, loss='hinge')
poly_svm_clf.fit(X_scaled, y)
sample_poly = poly_features.fit_transform([[5.5, 1.7]])
predict = poly_svm_clf.predict(sample_poly)
print('非线性SVM二分类器预测为:', predict)
def kernel_poly_svm_classify(X, y):
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
scale = StandardScaler()
X_scaled = scale.fit_transform(X)
kernel_poly_svm_clf = SVC(kernel="poly", degree=3, coef0=1, C=5)
kernel_poly_svm_clf.fit(X_scaled, y)
predict = kernel_poly_svm_clf.predict([[5.5, 1.7]])
print('核SVM二分类器预测为:', predict)
def kernel_rbf_svm_classify(X, y):
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
scale = StandardScaler()
X_scaled = scale.fit_transform(X)
kernel_rbf_svm_clf = SVC(kernel="rbf", gamma=5, C=1)
kernel_rbf_svm_clf.fit(X_scaled, y)
predict = kernel_rbf_svm_clf.predict([[5.5, 1.7]])
print('高斯RBF核SVM二分类器预测为:', predict)
if __name__ == '__main__':
X, y = load_dataset()
kernel_poly_svm_classify(X, y)
kernel_rbf_svm_classify(X, y)