一元线性回归-最小二乘法

# 线性回归

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值