机器学习(周志华)-python编程练习-习题3-5

系统3-5:

编辑实现线性判别分析,并给出西瓜数据集 3.0α 上的结果.

西瓜数据集3.0α:

sndensitysuger_ratiogood_melon
10.6970.461
20.7740.3761
30.6340.2641
40.6080.3181
50.5560.2151
60.4030.2371
70.4810.1491
80.4370.2111
90.6660.0910
100.2430.2670
110.2450.0570
120.3430.0990
130.6390.1610
140.6570.1980
150.360.370
160.5930.0420
170.7190.1030

 

python程序

#encoding:UTF-8

import csv
import numpy as np
from math import *
from numpy.linalg import *
from matplotlib import pyplot as plt
#
wm_data_30a = csv.reader(open('../data_set/watermelon_data_set_30a.csv','r'))

xi_d = np.mat(np.zeros((17,2)))
yi_d = np.mat(np.zeros((17,1)))


sn=0
for stu in wm_data_30a:
	#[sn x1 x2 y]
	if(stu[0].isdigit()==True):
		#xi_d=[x1,x2]
		xi_d[sn,:] = np.mat([float(stu[1]),float(stu[2])])
		yi_d[sn,0] = float(stu[3])
		sn = sn+1
		

u0=np.mat([[float(0.0)],[float(0.0)]])#2*1
u1=np.mat([[float(0.0)],[float(0.0)]])#2*1

for idx in range(8):#y=1
	#print('idx=',idx,xi_d[idx,0])
	u1[0,0] = u1[0,0] + xi_d[idx,0]
	u1[1,0] = u1[1,0] + xi_d[idx,1]
	#print(u1)
u1=u1/8
cov_1 = np.mat([[float(0.0),float(0.0)],[float(0.0),float(0.0)]])
for idx in range(8):
	cov_1 = cov_1 + (xi_d[idx,:].T - u1)*(xi_d[idx,:].T - u1).T
print('u1=',u1)
print('cov_1=',cov_1)

	
for idx in range(8,17):#y=0
	u0[0,0] = u0[0,0] + xi_d[idx,0]
	u0[1,0] = u0[1,0] + xi_d[idx,1]
u0=u0/9
cov_0 = np.mat([[float(0.0),float(0.0)],[float(0.0),float(0.0)]])
for idx in range(8,17):
	cov_0 = cov_0 + (xi_d[idx,:].T-u0)*(xi_d[idx,:].T-u0).T

print('u0=',u0)
print('cov_0=',cov_0)


#sw= cov_0+cov_1
sw= cov_0+cov_1
print('sw=',sw)
print('sw_inv=',sw.I)
print('u0-u1=',u0-u1)

w=(sw.I)*(u0-u1)
print('final w=',w)


for idx in range(17):
	if yi_d[idx,0]==1:
		plt.plot(xi_d[idx,0],xi_d[idx,1],'+r')
	else:
		plt.plot(xi_d[idx,0],xi_d[idx,1],'ob')

#
ply=-(0.1*w[0,0] - 0.01)/w[1,0];
pry=-(0.9*w[0,0] - 0.01)/w[1,0];

px=[0.1,0.9]
py=[ply,pry]

plt.plot(px,py)


plt.xlabel('density')
plt.ylabel('suger ratio')
plt.title('logistic function regression')
plt.show()

运行结果:

u1= [[0.57375]
 [0.27875]]
cov_1= [[0.1168675 0.0718285]
 [0.0718285 0.0712995]]
u0= [[0.49611111]
 [0.15422222]]
cov_0= [[ 0.30332289 -0.05006522]
 [-0.05006522  0.09295756]]
sw= [[0.42019039 0.02176328]
 [0.02176328 0.16425706]]
sw_inv= [[ 2.39631815 -0.31750075]
 [-0.31750075  6.13008588]]
u0-u1= [[-0.07763889]
 [-0.12452778]]
final w= [[-0.14650982]
 [-0.73871557]]

习题3-5

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值