机器学习实战5.2.3画出决策边界 原书本代码报错的修改

import matplotlib.pyplot as plt
import numpy as np
def loadDataSet():
	dataMat=[];labelMat=[]
	fr=open('testSet.txt')
	for line in fr.readlines():
		lineArr=line.strip().split()
		dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])])
		labelMat.append(int(lineArr[2]))
	return dataMat,labelMat

def sigmoid(inX):
	return 1.0/(1+np.exp(-inX))
	#return 2*1.0/(1+np.exp(-2*inX))-1

def gradAscent(dataMatIn,classLabels):
	dataMatrix=np.mat(dataMatIn)
	labelMat=np.mat(classLabels).transpose()
	m,n=np.shape(dataMatrix)
	alpha=0.001
	maxCycles=500
	weights=np.ones((n,1)) 
	for i in range(maxCycles):
		h=sigmoid(dataMatrix*weights)
		error=labelMat-h
		weights=weights+alpha*dataMatrix.transpose()*error
	return weights

'''
dataArr:样本数据的特征
labelMat:类别标签
weights:回归系数
'''
def plotBestFit(weights):	
	dataMat,labelMat=loadDataSet()
	dataArr=np.array(dataMat)  
	n=np.shape(dataArr)[0]
	xcord1=[];ycord1=[]
	xcord2=[];ycord2=[]
	for i in range(n):
		if int(labelMat[i])==1:
			xcord1.append(dataArr[i,1]);ycord1.append(dataArr[i,2])
		else:#if int(labelMat[i])==0:
			xcord2.append(dataArr[i,1]);ycord2.append(dataArr[i,2])
	fig=plt.figure()
	ax=fig.add_subplot(111)
	ax.scatter(xcord1,ycord1,s=30,c='red',marker='s')
	ax.scatter(xcord2,ycord2,s=30,c='green')
	x=np.arange(-3.0,3.0,0.1)
	y=(-weights[0]-weights[1]*x)/weights[2]
	y=np.array(y)
	ax.plot(x,y[0])
	plt.xlabel('x1');plt.ylabel('x2')
	plt.show()

def testLR():
	dataMat,labelMat=loadDataSet()
	dataArr=np.array(dataMat) 
	weights=gradAscent(dataArr,labelMat)
	plotBestFit(weights)
	
testLR()



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值