機器學習實戰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()



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章