作业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)
浙公网安备 33010602011771号