svm代码实现
支持向量機的優點有:
-
在高維空間里也非常有效
-
對于數據維度遠高于數據樣本量的情況也有效
-
在決策函數中使用訓練集的子集(也稱為支持向量),因此也是內存高效利用的。
-
通用性:可以為決策函數指定不同的核函數。已經提供了通用核函數,但也可以指定自定義核函數。
支持向量機的缺點包括:
-
如果特征數量遠遠大于樣本數,則在選擇核函數和正則化項時要避免過度擬合。
-
SVMs不直接提供概率估計, 這些計算使用昂貴的五倍交叉驗證(見分數和概率)。
SVC,?NuSVC?和?LinearSVC需要兩個數組作為輸入,[n_samples, n_features]尺寸的數組X作為訓練樣本,,?[n_samples]?大小的數組 y 作為類別標簽(字符串或者整數):
>>> from sklearn import svm >>> X = [[0, 0], [1, 1]] >>> y = [0, 1] >>> clf = svm.SVC() >>> clf.fit(X, y) SVC() >>> clf.predict([[2., 2.]]) array([1]) >>> # 獲取支持向量 >>> clf.support_vectors_ array([[0., 0.],[1., 1.]]) >>> # 獲取支持向量的索引 >>> clf.support_ array([0, 1]...) >>> # 獲取每個類中支持向量的個數 >>> clf.n_support_ array([1, 1]...)最大超平面邊距
?
?
import numpy as np import matplotlib.pyplot as plt from sklearn import svm from sklearn.datasets import make_blobs# we create 40 separable points X, y = make_blobs(n_samples=40, centers=2, random_state=6)# fit the model, don't regularize for illustration purposes clf = svm.SVC(kernel='linear', C=1000) clf.fit(X, y)plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)# plot the decision function ax = plt.gca() xlim = ax.get_xlim() ylim = ax.get_ylim()# create grid to evaluate model xx = np.linspace(xlim[0], xlim[1], 30) yy = np.linspace(ylim[0], ylim[1], 30) YY, XX = np.meshgrid(yy, xx) xy = np.vstack([XX.ravel(), YY.ravel()]).T Z = clf.decision_function(xy).reshape(XX.shape)# plot decision boundary and margins ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,linestyles=['--', '-', '--']) # plot support vectors ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,linewidth=1, facecolors='none', edgecolors='k') plt.show()非線性SVM
?
?
import numpy as np import matplotlib.pyplot as plt from sklearn import svmxx, yy = np.meshgrid(np.linspace(-3, 3, 500),np.linspace(-3, 3, 500)) np.random.seed(0) X = np.random.randn(300, 2) Y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)# fit the model clf = svm.NuSVC(gamma='auto') clf.fit(X, Y)# plot the decision function for each datapoint on the grid Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape)plt.imshow(Z, interpolation='nearest',extent=(xx.min(), xx.max(), yy.min(), yy.max()), aspect='auto',origin='lower', cmap=plt.cm.PuOr_r) contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,linestyles='dashed') plt.scatter(X[:, 0], X[:, 1], s=30, c=Y, cmap=plt.cm.Paired,edgecolors='k') plt.xticks(()) plt.yticks(()) plt.axis([-3, 3, -3, 3]) plt.show()總結
- 上一篇: Docker的windows家庭版安装
- 下一篇: 数学建模方法总结