diff --git a/SVM/SVM_scikit-learn.py b/SVM/SVM_scikit-learn.py index 3cdbb6a..ab33fe8 100644 --- a/SVM/SVM_scikit-learn.py +++ b/SVM/SVM_scikit-learn.py @@ -4,16 +4,16 @@ from sklearn import svm def SVM(): - '''data1Է''' + '''data1——线性分类''' data1 = spio.loadmat('data1.mat') X = data1['X'] y = data1['y'] y = np.ravel(y) plot_data(X,y) - model = svm.SVC(C=1.0,kernel='linear').fit(X,y) # ָ˺ΪԺ˺ - plot_decisionBoundary(X, y, model) # ߽߱ - '''data2Է''' + model = svm.SVC(C=1.0,kernel='linear').fit(X,y) # 指定核函数为线性核函数 + plot_decisionBoundary(X, y, model) # 画决策边界 + '''data2——非线性分类''' data2 = spio.loadmat('data2.mat') X = data2['X'] y = data2['y'] @@ -21,16 +21,16 @@ def SVM(): plt = plot_data(X,y) plt.show() - model = svm.SVC(gamma=100).fit(X,y) # gammaΪ˺ϵֵԽϵԽ - plot_decisionBoundary(X, y, model,class_='notLinear') # ߽߱ + model = svm.SVC(gamma=100).fit(X,y) # gamma为核函数的系数,值越大拟合的越好 + plot_decisionBoundary(X, y, model,class_='notLinear') # 画决策边界 -# ͼ +# 作图 def plot_data(X,y): plt.figure(figsize=(10,8)) - pos = np.where(y==1) # ҵy=1λ - neg = np.where(y==0) # ҵy=0λ + pos = np.where(y==1) # 找到y=1的位置 + neg = np.where(y==0) # 找到y=0的位置 p1, = plt.plot(np.ravel(X[pos,0]),np.ravel(X[pos,1]),'ro',markersize=8) p2, = plt.plot(np.ravel(X[neg,0]),np.ravel(X[neg,1]),'g^',markersize=8) plt.xlabel("X1") @@ -38,11 +38,11 @@ def plot_data(X,y): plt.legend([p1,p2],["y==1","y==0"]) return plt -# ߽߱ +# 画决策边界 def plot_decisionBoundary(X,y,model,class_='linear'): plt = plot_data(X, y) - # Ա߽ + # 线性边界 if class_=='linear': w = model.coef_ b = model.intercept_ @@ -50,7 +50,7 @@ def plot_decisionBoundary(X,y,model,class_='linear'): yp = -(w[0,0]*xp+b)/w[0,1] plt.plot(xp,yp,'b-',linewidth=2.0) plt.show() - else: # Ա߽ + else: # 非线性边界 x_1 = np.transpose(np.linspace(np.min(X[:,0]),np.max(X[:,0]),100).reshape(1,-1)) x_2 = np.transpose(np.linspace(np.min(X[:,1]),np.max(X[:,1]),100).reshape(1,-1)) X1,X2 = np.meshgrid(x_1,x_2)