サポートベクターマシンのパーセプトロンアルゴリズムをPythonで
2クラス分類を解く一番簡単なアルゴリズムです。
#適当な10点のx1,x2成分 x1 = np.array([0,2,4,6,8,10,12,14,16,18]) x2 = np.array([1,2,1,4,3,9,7,6,7,11]) #それぞれのラベル y = np.array([-1,-1,-1,-1,-1,1,1,1,1,1]) #点を全てプロット plt.scatter(px, py) #重みは0に近い値で初期化 w = np.array([0.001,0.001,0.001]) #失敗の数を表す k = 0 #サンプルの中での、ノルムの最大値 R = np.linalg.norm(np.array([x1[9], x2[9]])) #学習率 適当に小さく eta = 0.001 #繰り返し継続判定のフラグ miss = True #パーセプトロンの学習 while(miss): miss = False for i in range(10): if(y[i] * (w[0]*x1[i] + w[1]*x2[i] + w[2]) <= 0): #分類ミス miss = True w[0] = w[0] + eta * y[i] * x1[i] w[1] = w[1] + eta * y[i] * x2[i] w[2] = w[2] + eta * y[i] * R * R k += 1 #-3から20まで0.1刻みでnumpy配列で用意 x = np.arange(-3, 20, 0.1) #学習して得た直線の式 y = -(w[0] / w[1])*x - (w[2] / w[1]) plt.plot(x, y) plt.show()
いい感じに分類してくれていますね!