Day2-多变量线性回归理论+python实战

  • 声明:仅为个人学习笔记,如有误及侵权请私信联系

    文章目录

    • 1、多功能
      • 1.1 多变量声明及定义
      • 1.2 简化
    • 2、多元梯度下降法
    • 3、多元梯度下降法演练1-特征缩放
      • 3.1 归一化
    • 4、多元梯度下降法演练2-学习率
      • 4.1 α选择技巧
      • 4.2 小结
    • 5、特征和多项式回归
    • 6、正规方程(区别于迭代法的直接解法)
      • 6.1 正规方程求解步骤
      • 6.2 梯度下降法、正规方程法应用场景区分
      • 6.3 正规方程在矩阵不可逆情况下的解决办法
      • 解决办法:删除一些特征,或者正则化
    • 7、多变量线性回归Python编程实战
      • 7.1 读取数据
      • 7.2 特征归一化
      • 7.3 线性回归训练
      • 7.4 训练过程可视化
      • 7.5 使用scikit-learn预测
    • 8、normal equation(正规方程)Python编程实战
    • 想要完整代码私信联系,24小时内必回

1、多功能

1.1 多变量声明及定义

Day2-多变量线性回归理论+python实战_第1张图片假设函数更新由1更新为2:
Day2-多变量线性回归理论+python实战_第2张图片

1.2 简化

θo系数假定为1,以便使用矩阵进行运算
Day2-多变量线性回归理论+python实战_第3张图片

2、多元梯度下降法

假设:变量以向量形式表示
Day2-多变量线性回归理论+python实战_第4张图片
不同特征更新规则:
Day2-多变量线性回归理论+python实战_第5张图片

3、多元梯度下降法演练1-特征缩放

优化特征值,使其尽可能落在(-1,1)中,加速计算,特征值 除以最大值
Day2-多变量线性回归理论+python实战_第6张图片合理vs不合理缩放:
Day2-多变量线性回归理论+python实战_第7张图片

3.1 归一化

特征缩放不一定很精确,只是为了让梯度下降运行得更快一点、收敛所需的迭代次数更少,所以相似即可,例如计算得(-0.5,0.4),可以写作(-1,0.5)
Day2-多变量线性回归理论+python实战_第8张图片

4、多元梯度下降法演练2-学习率

代价函数随迭代次数变化情况(判断收敛)
Day2-多变量线性回归理论+python实战_第9张图片α太大的三种情况(解决办法都是调小α):
Day2-多变量线性回归理论+python实战_第10张图片

4.1 α选择技巧

每次尝试一个数量级,画出代价函数和迭代次数图像,辅助判断(例:取1,0.1,0.01,0.001,0.0000 …)
吴恩达取法:0.001–0.003—0.01-0.03-0.1-0.3-1-3…
Day2-多变量线性回归理论+python实战_第11张图片

尽量选择是代价函数J(θ)能快速下降的α。

4.2 小结

若α太小,收敛速度慢
若阿尔法大:代价函数可能不会在每次迭代都下降,甚至不收敛,在某些情况下,收敛速度也会很慢。

5、特征和多项式回归

观察现象可能适合二次函数,但是可能与事实不符,故需修正函数,例如再多一元特征参数:
Day2-多变量线性回归理论+python实战_第12张图片另一种方法举例:更换别的假设函数
Day2-多变量线性回归理论+python实战_第13张图片
在利用房屋面积三次拟合时也体现了特征缩放的必要性,本例中达到1000,000,000

6、正规方程(区别于迭代法的直接解法)

特征方程法可以不必考虑特征缩放

类比一元,采用导数定义,对每个特征元进行求偏导操作,令每个偏导=0,求解答案:为例
Day2-多变量线性回归理论+python实战_第14张图片添加一列当作Xo进行矩阵计算,以四(加Xo算5个)个特征变量为例:
Day2-多变量线性回归理论+python实战_第15张图片

6.1 正规方程求解步骤

Step1:构建矩阵X
Day2-多变量线性回归理论+python实战_第16张图片
Step2:构建result向量y
Day2-多变量线性回归理论+python实战_第17张图片Step3:求解θ
在这里插入图片描述实战例子:
Day2-多变量线性回归理论+python实战_第18张图片

6.2 梯度下降法、正规方程法应用场景区分

图很重要,内容很多!!!!!!!

Day2-多变量线性回归理论+python实战_第19张图片

6.3 正规方程在矩阵不可逆情况下的解决办法

通常不可逆,除非选择特征有问题
原因1:
例如选择英尺为单位,另一个选择平方m为单位,可以通过某种换算得到,则不可逆。
Day2-多变量线性回归理论+python实战_第20张图片2、有很多特征即m 10个样本,100个参数,明显不够。
Day2-多变量线性回归理论+python实战_第21张图片

解决办法:删除一些特征,或者正则化

7、多变量线性回归Python编程实战

练习1还包括一个房屋价格数据集,其中有2个变量(房子的大小,卧室的数量)和目标(房子的价格)。 我们使用我们已经应用的技术来分析数据集。

7.1 读取数据

path =  'ex1data2.txt'
data2 = pd.read_csv(path, header=None, names=['Size', 'Bedrooms', 'Price'])
data2.head()

Day2-多变量线性回归理论+python实战_第22张图片

7.2 特征归一化

data2 = (data2 - data2.mean()) / data2.std()
data2.head()

Day2-多变量线性回归理论+python实战_第23张图片

7.3 线性回归训练

此部分与单变量处理一致,代码如下:

# add ones column
data2.insert(0, 'Ones', 1)

# set X (training data) and y (target variable)
cols = data2.shape[1]
X2 = data2.iloc[:,0:cols-1]
y2 = data2.iloc[:,cols-1:cols]

# convert to matrices and initialize theta
X2 = np.matrix(X2.values)
y2 = np.matrix(y2.values)
theta2 = np.matrix(np.array([0,0,0]))

# perform linear regression on the data set
g2, cost2 = gradientDescent(X2, y2, theta2, alpha, iters)

# get the cost (error) of the model
computeCost(X2, y2, g2)

在这里插入图片描述

7.4 训练过程可视化

fig, ax = plt.subplots(figsize=(12,8))
ax.plot(np.arange(iters), cost2, 'r')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()

Day2-多变量线性回归理论+python实战_第24张图片

7.5 使用scikit-learn预测

我们也可以使用scikit-learn的线性回归函数,而不是从头开始实现这些算法。 我们将scikit-learn的线性回归算法应用于第1部分的数据,并看看它的表现。

from sklearn import linear_model
model = linear_model.LinearRegression()
model.fit(X, y)
x = np.array(X[:, 1].A1)
f = model.predict(X).flatten()

fig, ax = plt.subplots(figsize=(12,8))
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data.Population, data.Profit, label='Traning Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()

Day2-多变量线性回归理论+python实战_第25张图片

8、normal equation(正规方程)Python编程实战

Day2-多变量线性回归理论+python实战_第26张图片

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

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

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

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

 # 正规方程
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)#感觉和批量梯度下降的theta的值有点差距
final_theta2

输出结果:
Day2-多变量线性回归理论+python实战_第27张图片

想要完整代码私信联系,24小时内必回

你可能感兴趣的:(吴恩达机器学习个人学习笔记,python,线性回归,机器学习)