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

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

你可能感兴趣的:(分类)