Linear Regression with one variable
实验要求
"""
在这部分练习中,您将使用一个变量实现线性回归,以预测食品卡车的利润。
假设你是一家餐厅特许经营公司的首席执行官,正在考虑在不同的城市开设新的分店。
该连锁店已经在各个城市拥有卡车,您可以从这些城市获得利润和人口数据。
您希望使用此数据来帮助您选择下一个要扩展到的城市。
文件ex1data1.txt包含线性回归问题的数据集。
第一列是一个城市的人口,第二列是该城市食品卡车的利润。利润为负值表示亏损。
"""
代码部分如下
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
加载数据集
data = pd.read_csv('ex1data1.txt',names = ['Population','Profit']) # names参数传递列表,将名字命名在对应列上
data_x = np.array(data['Population']) # 将数据名为x的列提取
data_y = np.array(data['Profit']) # 同上
data.head() # 是指取数据的前n行数据,默认是前5行。
打印了前五行数据
看看数据分布
data.describe() # count数据量 mean均值 std标准差 min最小值 max最大值
绘图观察数据在坐标上的分布。
目标:利用梯度下降,使代价函数代价最小化,从而使假设函数更好地拟合数据,完成线性回归从而作出新的预测。
下面是代价函数:
J(θ)=12m∑i=1m(hθ(x(i))−y(i))2J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{
{
{\left( {
{h}_{\theta }}\left( {
{x}^{(i)}} \right)-{
{y}^{(i)}} \right)}^{2}}}J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
# 代价函数
def computeCost(X,y,theta):
inner = np.dot(X,theta.T)
result = np.sum(np.power(inner - y,2))
return result/( 2 * len(X))
让我们在训练集中添加一列,保存theta0的占位符。
以便我们可以使用向量化的解决方案来计算代价和梯度。
在第0个列上建造一个新列’ones’,插入值1,方便后面计算时theta0的x系数为1.
因为:
h(x)=θ0+θ1xh(x) = \theta_0 + \theta_1 xh(x)=θ0+θ1x
以下两式由梯度下降和代价函数求偏导数后求出。
θ0:=θ0−a1m∑i=1m(hθ(x(i))−y(i)){\theta_{0}}:={\theta_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{ \left({
{h}_{\theta }}({
{x}^{(i)}})-{
{y}^{(i)}} \right)}θ0:=θ0−am1i=1∑m(hθ(x(i))−y(i))
θ1:=θ1−a1m∑i=1m((hθ(x(i))−y(i))⋅x(i)){\theta_{1}}:={\theta_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left({ {h}_{\theta }}({ {x}^{(i)}})-{ {y}^{(i)}} \right)\cdot { {x}^{(i)}} \right)}θ1