作业3-正规方程

正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:∂J(θj) / ∂θj =  0 。
假设我们的训练集特征矩阵为 X(包含了x0=1)并且我们的训练集结果为向量 y,则利用正规方程解出向量 θ=(XTX)−1XTy (X转置乘以X,然后取逆,再乘以X的转置再乘以y)
上标T代表矩阵转置,上标-1 代表矩阵的逆。设矩阵A=XTX,则:(XTX)−1=A−1

梯度下降与正规方程的比较:

梯度下降:需要选择学习率α,需要多次迭代,当特征数量n大时也能较好适用,适用于各种类型的模型

正规方程:不需要选择学习率α,一次计算得出,需要计算(XTX)−1,如果特征数量n较大则运算代价大,因为矩阵逆的计算时间复杂度为O(n3),通常来说当n小于10000 时还是可以接受的,只适用于线性模型,不适合逻辑回归模型等其他模型

数据资源:

链接:https://pan.baidu.com/s/1Gs-EFgcYTmBmrZz_tHhGMQ
提取码:77ec

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

A = np.eye(5)
path = 'ex1data1.txt'
data = pd.read_csv(path,header=None,names=['Population','Profit'])

# data.shape 返回的是data矩阵的形状(97,2)表示97行 2 列
data.insert(0,'Ones',1) # 在第一列插入一列,全是1
cols = data.shape[1]  # 3
X = data.iloc[:,:-1] # X是data里的除最后列 行取全部,列去除最后一列
y = data.iloc[:,cols-1:cols] # y是data最后一列
# 把 X,y转化为np的矩阵
X = np.matrix(X.values)
y = np.matrix(y.values)

# 正规方程
def normalEqn(X, y):
    theta = np.linalg.inv(X.T@X)@X.T@y#X.T@X等价于X.T.dot(X)
    return theta

final_theta2=normalEqn(X, y)#这里用的是data1的数据
print(final_theta2)

  

posted @ 2021-09-25 18:37  My帝王源  阅读(101)  评论(0)    收藏  举报