# 线性回归
import numpy as np
import matplotlib.pyplot as plt
def loadData(filename):
xArr=[]
yArr=[]
label=[]
file=open(filename)
numFeat=len(open(filename).readline().split('\t')) - 1
for line in file.readlines():
lineArr=[]
curLine=line.strip().split('\t')
for i in range(numFeat):
lineArr.append(float(curLine[i]))
xArr.append(lineArr)
yArr.append(float(curLine[-1]))
return xArr, yArr
def plotDataSet():
xArr, yArr=loadData(r'D:\Users\Lenovo\PycharmProjects\MachineLearning\Datasource\Regression\ex0.txt')
n=len(xArr)
xcord=[]
ycord=[]
for i in range(n):
xcord.append(xArr[i][1])
ycord.append(yArr[i])
plt.scatter(xcord, ycord, s=20, c='blue', alpha=.5) # 绘制样本点
plt.title('DataSet')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
# w = (X.T*X)的逆*X.T*Y
def standRegression(xArr, yArr):
xMat=np.mat(xArr)
yMat=np.mat(yArr).T
xTx=xMat.T * xMat
if np.linalg.det(xTx) == 0.0:
print("行列式为0,不能求逆")
return
ws=xTx.I * (xMat.T * yMat)
return ws
def plotRegression():
xArr, yArr=loadData(r'D:\Users\Lenovo\PycharmProjects\MachineLearning\Datasource\Regression\ex0.txt')
ws=standRegression(xArr, yArr)
xMat=np.mat(xArr)
yMat=np.mat(yArr)
xCopy=xMat.copy()
xCopy.sort(0)
yHat=xCopy * ws
plt.plot(xCopy[:, 1], yHat, c='red')
plt.scatter(xMat[:, 1].flatten().A[0], yMat.flatten().A[0], s=15, c='blue', alpha=.5)
plt.title('DataSet')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
if __name__ == '__main__':
plotRegression()
一元线性回归-最小二乘法
最新推荐文章于 2024-06-12 21:06:50 发布