误差平方和最小的线性分类器估计

参见《模式识别》(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()

分类器设计结果figure_1

posted @ 2014-06-17 22:25  木棉花下  阅读(581)  评论(0)    收藏  举报