参见《模式识别》(Sergios)第三版 线性分类器--误差平方和估计。例3.3
原理:使已知训练特征向量的输出与真实类发生之间的误差平方和最小。得w=(X’X)^-1*X’*y
其中y为真实类属性(两类情况时第i个元素为1或-1),X为矩阵,X的每一行为输入样本向量。
# -*- coding:cp936 -*- #=============================================================================== # 误差平方和最小的线性分类器估计 #=============================================================================== #=============================================================================== # 题目: # 二维训练向量: # w1:[0.2,0.7],[0.3,0.3],[0.4,0.5],[0.6,0.5],[0.1,0.4] # w2: [0.4,0.6],[0.6,0.2],[0.7,0.4],[0.8,0.6],[0.7,0.5] # 设计一个误差平方和最优线性分类器w1*x1+w2*x2+w0=0.(分类向量为[w1,w2,w0] #=============================================================================== import numpy as np import matplotlib.pyplot as plt X = [[0.2,0.7,1], [0.3,0.3,1], [0.4,0.5,1], [0.6,0.5,1], [0.1,0.4,1], [0.4,0.6,1], [0.6,0.2,1], [0.7,0.4,1], [0.8,0.6,1], [0.7,0.5,1]] y = [1,1,1,1,1,-1,-1,-1,-1,-1] X = np.matrix(X) y = np.matrix(y) w = (X.T*X).I*X.T*y.T plt.figure() X11 = X[0:5,0].A1 X12 = X[0:5,1].A1 plt.scatter(X11,X12,s = 40) plt.hold(True) plt.scatter(X[5:,0].A1,X[5:,1].A1,s=40,marker='D',c='r') ly = np.linspace(0, 1, num = 10) # w[0]*lx+w[1]*ly+w[2]=0 lx = (-w[2]-w[1]*ly)/w[0] # print type(lx) # print type(ly) plt.plot(lx.A1,ly) plt.show()