吴恩达机器学习python作业之单变量线性回归

2023-11-06

第一个方法读取数据用的是pandas,第二个方法读数据用的是numpy。
第一种方法是梯度下降法,第二种方法是正规方程法。
跟着佬们的思路写写改改,如果有错误请私信或评论哦。
数据集理解:
ex1data1.txt的数据集是两列,第一列是population(自变量x),第二列是profit(因变量y),利用单变量线性回归进行拟合。

方法一:梯度下降法

参考链接:黄海广博士的github作业链接
https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes/blob/master/code/ex1-linear%20regression/ML-Exercise1.ipynb

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

#使用pandas包读取数据
dt = pd.read_csv("E:\机器学习\吴恩达\data_sets\ex1data1.txt",names = ["population" , "profit"] )

#读取的数据是pandas.DataFrame格式,将其转化为numpy.array格式
x_pd = dt["population"]
m = x_pd.size #97,是样本数
x = np.array(x_pd)
#(1, 97)
a = np.ones(m)



y_pd = dt["profit"]
y = np.array(y_pd)


#  #先进行绘图查看数据分布
plt.scatter(x,y)
# plt.show()

x = np.column_stack((a,x))
x = np.matrix(x)  #(97, 2)
#print(x.shape)
y = np.matrix(y)
y = y.T #(97, 1)
#print(y.shape)
theta = np.matrix(np.array([0,0])) #(1,2)
print(theta.shape[1])
#print(calculateCost(x,y,theta))
#print(type(theta)) #<class 'numpy.matrix'>



#计算损失函数
def calculateCost(X,Y,theta):
    inner = np.power((X * theta.T - Y) , 2)
    return np.sum(inner / (2 * m))




def gradientDescent(X,Y,theta,alpha,iters,m):
    """
    实现梯度下降算法
    :param X: 1*97的矩阵,记录了各个城市的人口
    :param Y: 1*97的矩阵,记录了各个城市的利润
    :param theta: h(theta) = theta_1*x+theta_0
    :param alpha: 学习率
    :param iters: 迭代次数
    :param m:样本数
    :return: theta
    """
    result = np.matrix(np.zeros(theta.shape))
    for i in range(iters):
        #实现求导公式
        temp = X * theta.T - Y

        for j in range(2):
            inner = np.multiply(temp , X[:,j])
            result[0,j] = theta[0,j] - alpha * np.sum(inner) / m

        theta = result
    return theta

learningRate = 0.01
iterTimes = 1000
gg = gradientDescent(x,y,theta,learningRate,iterTimes,m)
#[[-3.24140214  1.1272942 ]]

print(calculateCost(x,y,gg))
#4.515955503078913

f = gg[0,0] + gg[0,1] * x

plt.plot(x,f,'r')
plt.show()

1.从txt文件中读取数据

#方法一:使用pandas包中的read_csv读取数据
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

#使用pandas包读取数据
dt = pd.read_csv("E:\机器学习\吴恩达\data_sets\ex1data1.txt",names = ["population" , "profit"] )

#读取的数据是pandas.DataFrame格式,将其转化为numpy.array格式
x_pd = dt["population"]
m = x_pd.size #97,是样本数
x = np.array(x_pd)
#(1, 97)
a = np.ones(m)


y_pd = dt["profit"]
y = np.array(y_pd)
#方法二:使用numpy包里的loadtxt函数
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

#使用pandas包读取数据
dt = np.loadtxt("E:\博士\学习资料\机器学习\吴恩达\data_sets\ex1data1.txt",delimiter=',')

#读取的数据是pandas.DataFrame格式,将其转化为numpy.array格式
x = dt[:,0]
m = len(x) #记录样本数
a = np.ones(m)

y = dt[:,1]

2.先用matplotlib查看数据集分布

#先进行绘图查看数据分布
plt.scatter(x,y)
# plt.show()

3.将array数据格式转换为matrix数据格式,方便后期进行矩阵运算

x = np.column_stack((a,x))
x = np.matrix(x)  #(97, 2)
#print(x.shape)
y = np.matrix(y)
y = y.T #(97, 1)
#print(y.shape)
theta = np.matrix(np.array([0,0])) #(1,2)
print(theta.shape[1])
#print(calculateCost(x,y,theta))
#print(type(theta)) #<class 'numpy.matrix'>

4.利用矩阵运算计算损失函数

#计算损失函数
def calculateCost(X,Y,theta):
    inner = np.power((X * theta.T - Y) , 2)
    return np.sum(inner / (2 * m))

5.利用矩阵运算进行梯度下降算法的实现

def gradientDescent(X,Y,theta,alpha,iters,m):
    """
    实现梯度下降算法
    :param X: 1*97的矩阵,记录了各个城市的人口
    :param Y: 1*97的矩阵,记录了各个城市的利润
    :param theta: h(theta) = theta_1*x+theta_0
    :param alpha: 学习率
    :param iters: 迭代次数
    :param m:样本数
    :return: theta
    """
    result = np.matrix(np.zeros(theta.shape))
    for i in range(iters):
        #实现求导公式
        temp = X * theta.T - Y

        for j in range(2):
            inner = np.multiply(temp , X[:,j])
            result[0,j] = theta[0,j] - alpha * np.sum(inner) / m

        theta = result
    return theta

6.绘制曲线观察拟合程度

在这里插入图片描述

learningRate = 0.01
iterTimes = 1000
gg = gradientDescent(x,y,theta,learningRate,iterTimes,m)
#[[-3.24140214  1.1272942 ]]

print(calculateCost(x,y,gg))
#4.515955503078913

f = gg[0,0] + gg[0,1] * x

plt.plot(x,f,'r')
plt.show()

方法二:正规方程法

参考链接:
(7条消息) 吴恩达|机器学习作业1.0单变量线性回归_学吧学吧终成学霸的博客-CSDN博客

import numpy as np
from matplotlib import pyplot as plt

#1.读取数据并进行处理
dt = np.loadtxt("E:\博士\学习资料\机器学习\吴恩达\data_sets\ex1data1.txt",delimiter=",")
#dt类型:<class 'numpy.ndarray'>
#dt.shape:(97, 2)
#len(dt):97

cols = dt.shape[1]
#特征个数应该是前cols-1个
X = dt[:,0:cols - 1]
y = dt[:,-1]


#2.先可视化数据集,观察数据集的分布
plt.scatter(X,y)


#3.利用正规方程计算theta的值
m = X.shape[0]
a = np.ones((m,1)) #(97,1)
x = np.concatenate((a,X),1)
x_T = x.T
temp0 = np.linalg.inv(np.dot(x_T,x))
temp1 = np.dot(temp0,x_T)
theta = np.dot(temp1,y)
print(theta)

f = np.dot(x,theta)
plt.title("linear regression")
plt.xlabel("population")
plt.ylabel("profit")
plt.plot(X,f,"r")
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

吴恩达机器学习python作业之单变量线性回归 的相关文章

  • 在 while 循环中更改 tkinter 画布中的图像

    我的完整代码是here https gist github com ItsBerry de245ba70376cb07f4dbe2d25c223f5f 我正在尝试使用 tkinter 的画布创建一个小游戏 让人们练习学习高音谱号上的音符 最
  • 使用 Flask 从 Jinja 模板中的 settings.py 文件获取变量

    假设我有 settings py 文件 其中包含一堆常量 将来可能会更多 如何访问 Jinja 模板中的这些变量 Flask 会自动将您的应用程序的配置包含在标准上下文 http flask pocoo org docs templatin
  • BeautifulSoup 不适用于某些网站

    我有这个脚本 import urrlib2 from bs4 import BeautifulSoup url http www shoptop ru page urllib2 urlopen url read soup Beautiful
  • pandas:使用运算符链接过滤 DataFrame 的行

    大多数业务在pandas可以通过操作符链接来完成 groupby aggregate apply等 但我发现过滤行的唯一方法是通过普通的括号索引 df filtered df df column value 这没有吸引力 因为它需要我分配d
  • 如何在 pySpark 数据框中添加行 ID [重复]

    这个问题在这里已经有答案了 我有一个 csv 文件 我在 pyspark 中将其转换为 DataFrame df 经过一番改造后 我想在 df 中添加一列 这应该是简单的行 ID 从 0 或 1 开始到 N 我将 df 转换为 rdd 并使
  • 如何消除 matplotlib 轴的相对偏移

    当我尝试对具有足够大数字的范围进行绘图时 我得到一个所有刻度都有相对偏移的轴 例如 plot 1000 1001 1002 1 2 3 我在横坐标轴上得到这些刻度 0 0 0 5 1 0 1 5 2 0 1e3 问题是如何删除 1e3并得到
  • python请求:重试直到收到有效响应

    我想知道是否存在重试请求一定次数的常见模式 可能由于服务器错误或网络不良而失败 我想出了这个 并且我愿意在那里找到更好的实现 cnt 0 while cnt lt 3 try response requests get uri if res
  • 如何让MagicMock返回多个值

    我想模拟一个图书馆 matplotlib对于它的价值 并且遇到一个问题 当调用模拟并期望返回元组时 它会失败 有一个更好的方法吗 Python 3 7 2 default Jan 13 2019 12 50 15 Clang 10 0 0
  • seaborn 未在定义的子图中绘制

    我正在尝试用这段代码并排绘制两个图表 fig ax1 ax2 plt subplots 1 2 sns displot x X train Age hue y train ax ax1 sns displot x X train Fare
  • 如何读取 sql 查询到 pandas dataframe / python / django

    我在下面使用这个views py获取应用程序 from django db import connection def test request cursor connection cursor sql SELECT x n from ta
  • 如何在 PySide/PyQt 中制作一个位于屏幕中央的小部件?

    这段代码有效 但我想知道是否有更简单的方法 def center self qr self frameGeometry cp gui QDesktopWidget availableGeometry center qr moveCenter
  • python 中使用 scipy 截断正态分布

    我正在尝试使用截断正态分布scipy在Python3 我想做一些简单的事情 绘制以 0 5 为中心 范围从 0 到 1 的截断法线的 pdf 我有以下代码行 from scipy import truncnorm import matplo
  • 如何使用 Python Flask-Security 使用 bcrypt 加密密码?

    我正在尝试使用 Flask Security 文档中的标准基本示例 并使其正常工作 除了密码以明文形式存储之外 我知道这一行 user datastore create user email email protected cdn cgi
  • 在 PyQt 中使用 Windows 7 任务栏功能

    我正在寻找有关将一些新的 Windows 7 任务栏功能集成到我的 PyQt 应用程序中的信息 具体来说 如果已经存在使用新进度指示器的可能性 see here http www petri co il wp content uploads
  • Anaconda (Python) - Windows 10 上的 Cmder 集成

    我在 Windows 10 64 位上通过 Anaconda 让 Cmder 使用 Python 时遇到了一些麻烦 我让 Anaconda 工作得很好 测试过用 matplotlib 绘制一些东西 它与 Anaconda Prompt 一起
  • Django 1.6:如何在视图中访问静态文件

    我已经尝试过解决方案here https stackoverflow com questions 11721818 django get the static files url in view这对我不起作用 我正在为 Python 创建一
  • Python 中的“finally”总是执行吗?

    对于Python中任何可能的try finally块 是否保证finally块总是会被执行吗 例如 假设我在except block try 1 0 except ZeroDivisionError return finally print
  • python 中的优化标准化

    在优化过程中 对输入参数进行归一化 使它们处于同一数量级 通常会很有帮助 这样收敛效果会更好 例如 如果我们想要最小化 f x 而合理的近似值是 x0 1e3 1e 4 则将 x0 0 和 x0 1 归一化到大约相同的数量级可能会有所帮助
  • 是否有比 .apply() 更慢或更受控制的替代方案?

    所以这似乎是一个奇怪的问题 但我有一只熊猫DataFrame其中包含地址 我想对其进行地理编码 以便获得纬度和经度 我有可以使用的代码 apply 感谢这个非常有帮助的线程 使用 geopy pandas 的新列坐标 https stack
  • Mac 上的 PythonXY?

    如何在 Mac OS X Lion 上安装 Python 我开始了 它应该能够通过 macports 但无论如何我找不到 mac ports 网站上所述的端口 pythonXY 我对 MAC 和 pythonXY 都不太了解 但在 pyth

随机推荐

  • OpenCV调用cv2.imshow显示错误 “The function is not implemented. Rebuild the library with Windows”的解决办法

    在Windows环境下 已经安装了opencv python 读取图片 处理都没有问题 唯独显示就会出错 说 The function is not implemented Rebuild the library with Windows
  • Android 蓝牙开发(六)hfp连接

    转载请注明出处 http blog csdn net vnanyesheshou article details 71106622 本文已授权微信公众号 fanfan程序媛 独家发布 扫一扫文章底部的二维码或在微信搜索 fanfan程序媛
  • nginx+php 出现404错误解决方法

    http www 51ou com browse linuxwt 32263 html 错误日志 装好 nginx 1 0 5 与 php 5 3 6 php fpm 迫不及待的测试 info php 但是只返回了空白页 什么也没有输出 以
  • 关于解决Linux(ubuntu) 中不允许root用户ssh远程登录的问题

    当我们在ubuntu中登录ssh的时候 会出现如下问题 是因为系统默认禁止root用户登录ssh 此时我们可以这样解决 1 首先 按Ctrl C退出密码输入界面 2 然后输入 su 一定是su 不是su 3 编辑sshd config文件
  • VS快捷键大全(超详细)

    本文主要介绍VS编译器下的快捷键 文章目录 1 项目相关的快捷键 2 编辑相关的键盘快捷键 3 导航相关的键盘快捷键 4 调试相关的键盘快捷键 5 搜索相关的键盘快捷键 1 项目相关的快捷键 Ctrl Shift B 生成项目 Ctrl A
  • 2020.11.14 数组的相对排序

    2020 11 14 数组的相对排序 题目描述 给你两个数组 arr1 和 arr2 arr2 中的元素各不相同 arr2 中的每个元素都出现在 arr1 中 对 arr1 中的元素进行排序 使 arr1 中项的相对顺序和 arr2 中的相
  • CORE-ESP32C3

    目录 参考博文 项目官方地址 显示效果 硬件准备 软件版本 日志及soc下载工具 软件使用 接线示意图 硬件接线 一 Elink驱动管脚适配 二 天气信息获取 API使用方式 接口格式 注意需不需要tls http apicn luatos
  • Error[Pe147]: declaration is incompatible with "__nounwind __interwork __softfp unsigned long __get_

    原文地址 http www emcu it ARM Compiler IAR IAR tips and tricks html IAR tips and tricks Home Page STM32 home page CMSIS buil
  • vue项目兼容IE11

    1 npm安装babel polyfill npm install babel polyfill save dev 2 在入口文件main js中引入 import babel polyfill 3 如果也是用了官方脚手架vue cli 还
  • Tomcat项目500报错处理方法之一

    今天做的项目出现了Tomcat500错误 根据错误提示是 java lang ClassNotFoundException 搜索了很多解决方法 最终找到一个解决方案 https blog csdn net u011008029 articl
  • 类#是公共的,应在名为#.java的文件中声明

    1 如果类A被声明为公共的 public 那么必须将类A保存在名为A java的文件中 2 反之 在一个文件中最多包含一个顶级的公共类 并且该公共类的名字与文件名相同 比如文件A java中 允许定义一个或多个类 但最多允许一个顶级的公共类
  • 又一波Microsemi招聘信息

    Position Manager ASIC Design Business Unit ESC PerformanceStorage Location Shanghai China Youwill build and lead an IC d
  • Deeplabcut----(3)新建自己的训练(多只动物)

    多动物的标注比单动物复杂了N倍 动物回来会穿梭 以至于一时不知道是哪只 需要对比着视频观看找对应的 1 打开deeplabcut 新建训练 2 编辑配置文件设置动物数量 关节 骨架等 单击Edit config file开始编辑 可以按照自
  • RT-DETR原理与简介(干翻YOLO的最新目标检测项目)

    概述与简介 RT DETR是一种实时目标检测模型 它结合了两种经典的目标检测方法 Transformer和DETR Detection Transformer Transformer是一种用于序列建模的神经网络架构 最初是用于自然语言处理
  • Hugging Face——MLM预训练掩码语言模型方法

    对于许多涉及 Transformer 模型的 NLP 程序 我们可以简单地从 Hugging Face Hub 中获取一个预训练的模型 然后直接在你的数据上对其进行微调 以完成手头的任务 只要用于预训练的语料库与用于微调的语料库没有太大区别
  • PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别

    PHP CGI FastCGI PHP FPM PHP CGI是不同的PHP执行方式和处理程序 它们有以下区别 PHP CGI Common Gateway Interface PHP CGI是一种通过CGI协议与Web服务器通信的PHP执
  • 基于 LSTM 的船舶轨迹预测,单步预测

    之前给的数据和代码可能有一些问题 现在从新修改一下 末尾提供数据集和源码链接 单步预测步长 10 单步循环预测长时间的位置 从第1个位置开始 前10个位置 真实位置 预测第11个位置 然后第2个位置到第11个位置 预测值 为一组 预测第12
  • c++20新特性

    个人博客地址 https cxx001 gitee io 前言 自C 11这个大版本更新以来 后来陆续有两次小版本迭代C 14 C 17 它们主要是对C 11的补充扩展 并没有增加太多大的特性 而这次的C 20 和当年C 11一样 又是一次
  • 用卷积神经网络实现表情识别

    用卷积神经网络实现表情识别 一 卷积神经网络简介 1 定义 2 结构 3 理论 4 性质 二 在python环境下实现 三 总结 一 卷积神经网络简介 1 定义 卷积神经网络 Convolutional Neural Networks CN
  • 吴恩达机器学习python作业之单变量线性回归

    第一个方法读取数据用的是pandas 第二个方法读数据用的是numpy 第一种方法是梯度下降法 第二种方法是正规方程法 跟着佬们的思路写写改改 如果有错误请私信或评论哦 数据集理解 ex1data1 txt的数据集是两列 第一列是popul