机器学习1编程作业:线性回归

这篇博客通过Python详细介绍了线性回归,包括单变量和多变量线性回归。内容涵盖绘制数据、梯度下降、代价函数的计算以及特征归一化,最后进行了代码总结。
摘要由CSDN通过智能技术生成

原任务是在Octave/MATLAB实现,本次编程作业全部以python完成。


01 简单的练习

总结下题目:输出一个5*5的单位矩阵


  • 在此我们用np.eye(N,M=None, k=0, dtype=<type ‘float’>),首先N代表的是输出方阵的维度,第二个参数不用设置默认M=N,主要看第三个参数,默认是对角线为1,其余全为0;如果k为正数,则对角线往上第k个全为1,其余全为0;如果k为负数,则对角线往下第k个全为1,其余全为0。
import numpy as np
A = np.eye(5)
print(A)
"""
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]
"""

02 单变量线性回归

根据这座城市的人口数量及该城市小吃店的利润,来预测开小吃店的利润。


2.1 绘制数据

  • 读入数据:在此我们引入pandas库,该库可以帮助我们从诸如 csv 类型的文件导入数据,并且可以用它快速的对数据进行转换和过滤的操作。
import pandas as pd
path = "machine-learning-ex1\machine-learning-ex1\ex1\ex1data1.txt"
data = pd.read_csv(path,header=None,names=['Population','Profit'])#header决定要不要原始的表头,name给出自定义的表头。
print(data.head())#从头查询数据
"""
   population   profit
0      6.1101  17.5920
1      5.5277   9.1302
2      8.5186  13.6620
3      7.0032  11.8540
4      5.8598   6.8233
"""
  • 数据可视化:在此我们引入matplotlib.pyplot库,使用plot函数画图。
import matplotlib.pyplot as plt
data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))#生成图形,kind‘指定所画图的类型,figsize 指定图片大小。
plt.show()#显示图形

在这里插入图片描述

2.2 梯度下降

这部分需要使用梯度下降将线性回归参数 θ 拟合到数据集上。

2.21 公式

  • 代价函数

在这里插入图片描述

  • 假设函数

在这里插入图片描述

  • 参数更新

在这里插入图片描述

  • 随着梯度下降不断地更新参数,参数也就越接近使代价函数最小的最优值

2.22 实现

  • 我们要为我们之前读取的数据添加一列x,用来更新θ_0。
data.insert(0, 'Ones', 1) #相当于在第0列,添加一个表头名为Ones,并且该列均为1
print(data.head())
"""
   Ones  Population   Profit
0     1      6.1101  17.5920
1     1      5.5277   9.1302
2     1      8.5186  13.6620
3     1      7.0032  11.8540
4     1      5.8598   6.8233
"""
  • 分割X和y。使用pandas的iloc来进行选择训练集X和目标y
# 分割X和y
lists = data.shape[1]#输出列数
X = data.iloc[:,:-1]#X是第一列到最后一列,但不包括最后一列,因为 python的范围/切片不包括终点
y = data.iloc[:,lists-1:lists]#最后一列
#y = data.iloc[:,-1]#也是最后一列
print(X.head())
"""
   Ones  Population
0     1      6.1101
1     1      5.5277
2     1      8.5186
3     1      7.0032
4     1      5.8598
"""
print(y.head())
"""
    Profit
0  17.5920
1   9.1302
2  13.6620
3  11.8540
4   6.8233
"""
  • 我们还要将θ初始化为0,并将θ、X、y全部转化为矩阵
X = np.matrix(X.values)
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0]))
print(X.shape)#(97, 2)
print(y.shape)#(97, 1)
print(theta.shape)#(1, 2)

2.23 计算J(θ)

  • 计算代价函数来检测代价函数的收敛性。根据上面的公式我们写出代价函数。
def computeCost(X, y, theta)
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值