使用线性核函数的 SVM 算法识别鸢尾花
{ "from sklearn import datasets\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom matplotlib.colors import ListedColormap\nimport matplotlib.pyplot as plt\nfrom sklearn.svm import SVC\n\niris = datasets.load_iris()\nX = iris.data[:, [2,3]]\ny = iris.target\n\nprint('Class labels:', np.unique(y))\n\n# 将数据拆分为 70% 的训练数据和 30% 的测试数据:\nX_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.3,random_state=1, stratify=y)\nprint('Labels counts in y:', np.bincount(y))\nprint('Labels counts in y_train:', np.bincount(y_train))\nprint('Labels counts in y_test:', np.bincount(y_test))\n\nsc = StandardScaler()\nsc.fit(X_train)\nX_train_std = sc.transform(X_train)\nX_test_std = sc.transform(X_test)\n\ndef plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):\n # 设置标记生成器和颜色图\n markers = ('s','^','o','x','v')\n colors = ('red','blue','lightgreen','gray','cyan')\n cmap = ListedColormap(colors[:len(np.unique(y))])\n # 绘制决策曲面\n x1_min,x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n x2_min,x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n xx1, xx2 = np.meshgrid(np.arange(x1_min,x1_max, resolution),\n np.arange(x2_min,x2_max, resolution))\n Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)\n Z = Z.reshape(xx1.shape)\n plt.contourf(xx1, xx2, Z, alpha=0.3, cmap=cmap)\n plt.xlim(xx1.min(), xx1.max())\n plt.ylim(xx2.min(), xx2.max())\n\n for idx, cl in enumerate(np.unique(y)):\n plt.scatter(x=X[y==cl,0],\n y=X[y==cl,1],\n alpha=0.8,\n c=colors[idx],\n marker=markers[idx],\n label=cl,\n edgecolors='black')\n # 突出显示测试样品\n if test_idx:\n # 绘制所有样本\n X_test, y_test = X[test_idx, :], y[test_idx]\n plt.scatter(X_test[:, 0],\n X_test[:, 1],\n c='y',\n edgecolors='black',\n alpha=1.0,\n linewidths=1,\n marker='o',\n s=100,\n label='test set')\n\n\n# 使用标准化训练数据训练 SVM 模型:\nX_combined_std = np.vstack((X_train_std, X_test_std))\ny_combined=np.hstack((y_train, y_test))\n\nsvm = SVC(kernel='linear', C=1.0, random_state=1)\nsvm.fit(X_train_std, y_train)\n\nplot_decision_regions(X_combined_std,\n y_combined,\n classifier=svm,\n test_idx=range(105, 150))\nplt.xlabel('petal length [standardized]')\nplt.ylabel('petal width [standardized]')\nplt.legend(loc='upper left')\nplt.tight_layout()\nplt.title('Petal recognition results\n 201530508 李涵博')\nplt.rcParams['font.sans-serif'] = ['KaiTi']\nplt.rcParams['axes.unicode_minus']=False\n# plt.savefig('images/03_11.png', dpi=300)\nplt.show()\n\ny_pred = svm.predict(X_test_std)\nprint('Misclassified samples: %d' % (y_test != y_pred).sum())\nprint('Accuracy: %.2f' % svm.score(X_test_std, y_test))\n\n\n本代码使用的是支持向量机(Support Vector Machine,SVM)算法的线性核函数(kernel='linear')。
原文地址: https://www.cveoy.top/t/topic/pA5s 著作权归作者所有。请勿转载和采集!