2021-05-05

Python数据分析-绘制3D图形 【代码】Python数据分析-绘制3D图形。 阅读详情

了解了梯度下降的知识,不在代码上体现怎么可以呢?
上代码,先看第一个,

经典房价问题:

# 导入需要用到的库
import numpy as np
import matplotlib.pyplot as plt

# 定义存储输入数据(x)和目标数据(y)的数组
x, y = [], []
# 遍历数据集,变量sample对应的正是一个个样本
for sample in open("C:\\Users\\贺旭伟\\Desktop\\shujuji.txt.txt", 'r'):
    _x, _y = sample.split(",")
    # 将字符串数据转化为浮点数
    x.append(float(_x))
    y.append(float(_y))
# 读取完数据后,将他们转化为Numpy数组以方便进一步的处理
x, y = np.array(x), np.array(y)
# 标准化
x = (x - x.mean()) / x.std()
# 将原始数据集以散点的形式画出
plt.figure()
plt.scatter(x, y, c="g", s=6)
plt.show()
# (-2,4)这个区间上取100个点作为画图的基础
x0 = np.linspace(-2, 4, 100)
# 利用Numpy的函数定义训练并返回多项式回归模型的次数
# deg参数代表着模型参数中的n,即模型中多项式的次数
# 返回的模型能够根据输入的x(默认是x0),返回预测的y
def get_model(deg):
    return lambda input_x=x0: np.polyval(np.polyfit(x, y ,deg), input_x)
# 根据参数n、输入的x,y返回相对应的损失
def get_cost(deg, input_x,input_y):
    return 0.5 * ((get_model(deg)(input_x) - input_y) ** 2).sum()
# 定义测试函数集并根据它进行各种实验
test_set = (1, 4, 10)
for d in test_set:
    # 输出损失
    print(get_cost(d, x, y))
# 画出相应的图像
plt.scatter(x, y, c="g", s=20)
for d in test_set:
    plt.plot(x0, get_model(d)(), label="degree = {}".format(d))
# 将横轴和纵轴的范围分别限制在(-2,4)和(10^5,10^6)
plt.xlim(-2, 4)
plt.ylim(1e5, 1e6)
# 调用legend方法使曲线对应的label正确显示
plt.legend()
plt.show()

在这里插入图片描述
给数据集(在桌面创建txt文件即可,注意修改代码中的路径):
2104,399900
1600,329900
2400,369000
1416,232000
3000,539900
1985,299900
1534,314900
1427,198999
1380,212000
1494,242500
1940,239999
2000,347000
1890,329999
4478,699900
1268,259900
2300,449900
1320,299900
1236,199900
2609,499998
3031,599000
1767,252900
1888,255000
1604,242900
1962,259900
3890,573900
1100,249900
1458,464500
2526,469000
2200,475000
2637,299900
1839,349900
1000,169900
2040,314900
3137,579900
1811,285900
1437,249900
1239,229900
2132,345000
4215,549000
2162,287000
1664,368500
2238,329900
2567,314000
1200,299000
852,179900
1852,299900
1203,239500

在这里插入图片描述
在这里插入图片描述
这是代码跑出来的图。下面详细讲解:
首先导入numpy和matplotlib两个库。用一个循环来把文本中的数据赋值给_x和_y,
然后把x和y从列表转为numpy中的一维数组。x是房子面积,y是房价。
先画一个散点图,对应于xy,就是我们的第一个图。可以看到第一个图和第二个图的区别就是横坐标不一样,原因是第一个图没有标准化,你可能不太理解为什么要标准。下面给出标准化的作用:
复制粘贴人家的不好,我给出链接,哈哈,标准化的意义和方法
图二和图三中横轴是标准化之后的面积,纵轴是房子的价格。
为了画出图三的线:
模型损失函数是平方损失函数也就是所谓的欧式距离,这里的目的是要将损失函数最小化
利用Numpy训练和优化

模型的数学表达式为:
f(x|p;n)=p0xn+p1x(n-1)+…+pn-1x+pn
L(p;n)=0.5∑[f(x|p;n)-y]^2
可能会卡在numpy的几个拟合函数上,给链接

return lambda input_x=x0: np.polyval(np.polyfit(x, y ,deg), input_x)
可能这个函数不太明白,我简单讲讲,lambda是python的匿名函数,没啥好说的,右面的两个函数,从内到外:先说np.polyfit,它有三个参数,x和y就是需要拟合的数据,deg是需要拟合出函数的阶数,比如deg=5,那么就会输出六个数(假如是1,2,3,4,5,6),则代表拟合出的函数是1x5+2x4+3x3+4x2+5x1+6。就是这个意思。而polyval函数的意思是把第二个参数x带入得到的函数里,求值。挺详细吧,还没听懂就评论区留言吧,一起学习。

还有一点需要注意:

def get_model(deg):
    return lambda input_x=x0: np.polyval(np.polyfit(x, y ,deg), input_x)
def get_cost(deg, input_x,input_y):
    return 0.5 * ((get_model(deg)(input_x) - input_y) ** 2).sum()

第一个函数返回的是一个函数(叫模型也行),第二个函数用到了第一个函数返回的函数(模型),第二个函数得到的就是平方损失函数(我觉得和代价函数出不多,仅本人愚见)。
然后代码就没什么讲的了,这个代码没有用到梯度下降,所以我们来看第二个代码,用梯度下降找代价函数最低点。

梯度下降问题

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d.axes3d import Axes3D

#f(w1,w2) = w1^2 + w2^2 + 2*w1*w2 + 500
def targetFunction(W):
    w1, w2 = W
    return w1 ** 2 + w2 ** 2 + 2 * w1 * w2 + 500
def gradientFunction(W):#梯度功能
    w1, w2 = W
    w1_grad = 2 * w1 + 2 * w2
    w2_grad = 2 * w2 + 2 * w1
    return np.array([w1_grad, w2_grad])#以二维数组的形式返回梯度
def batch_gradient_distance(targetFunc,gradientFunc,init_W,learning_rate = 0.01,tolerance = 0.0000001): #核心算法
    W = init_W #w是随机生成的二维数组
    target_value = targetFunc(W) #生成目标函数
    counts = 0 #开始统计
    while counts < 5000:
        gradient = gradientFunc(W)#计算出梯度
        next_W = W - gradient * learning_rate#新的二维数组等于原有的减去梯度*学习率
        next_target_value = targetFunc(next_W)#创建新的目标函数
        if abs(next_target_value - target_value)<tolerance:
            print("此结果经过了", counts, "次循环")
            return next_W
        else:
            W, target_value = next_W, next_target_value
            counts += 1
    else:
        print("没有取到极值点")

if __name__ == '__main__':

    np.random.seed(0) #保证每次运行随机出来的结果一致

    init_W = np.array([np.random.random(),np.random.random()]) #随机初始的w1,创建一个随机的二维数组

    w1,w2 = batch_gradient_distance(targetFunction,gradientFunction,init_W)

    print(w1,w2)
    x1=np.arange(-10,11,1) #为了绘制函数的原图像

    x2=np.arange(-10,11,1)

    x1, x2 = np.meshgrid(x1, x2) # meshgrid :3D坐标系

    z=x1**2 + x2**2 + 2*x1*x2+500

    fig = plt.figure()

    ax = Axes3D(fig)

    ax.plot_surface(x1, x2, z) #绘制3D坐标系中的函数图像

    ax.scatter(w1,w2, targetFunction([w1,w2]), s=50, c='red') #绘制已经找到的极值点

    ax.legend() #使坐标系为网格状

    plt.show() #显示

这个代码为了避免进入局部最优解问题,我直接给出函数f(x,y)=x2+y2+2xy+500。找出的最优解的图像为:
在这里插入图片描述
图中的红点就是最低点。
接下来就要用到偏导的知识了:
在这里插入图片描述
还有一个点要注意:
在这里插入图片描述
在这里插入图片描述

【Numpy学习】第二节 Numpy随机抽样 0. 内容总结 1. 石油勘探 野外正在进行9(n=9)口石油勘探井的发掘工作,每一口井能够开发出油的概率是0.1(p=0.1)。请问,最终所有的勘探井都勘探失败的概率? import matplotlib.pyplot as plt import numpy as np np.random.seed(0) x = np.random.binomial(9, 0.1, size=50000) plt.hist(x) plt.xlabel('随机变量:成功次数') plt.ylabel('次数') plt. 阅读详情

相关推荐

使用matplotlib绘制简单图表第二课

一、绘制堆积面积图 1.使用 stackplot()绘制堆积面积图 使用pyplot的stackplot0函数可以快速绘制堆积面积图,stackplot(0 函数的语法格式如下所示: stackplot(x, y, labels=() ,basel ine=' zero', data=None, *args, ** kwargs) 该函数常用参数的含义如下。 x:表示x轴的数据,可以是一维数组。 y:表示y轴的数据,可以是二维数组或一维数组序列。 labels:表示每组折线及填充区域的标签。 baseli

weixin_55680204的博客 1857

手写实现线性回归

一元一次拟合f(x)=wx+b 使用已有的线性回归拟合函数 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression X = np.linspace(2, 10, 20).reshape(-1,1) # f(x) = wx + b y = np.random.randint(1, 6, size=1)*X + np.random.randint(-5, 5

糖公子没来过的博客 1041

荣耀机试题 2021.04 ~05

记录下最近面试的算法题 题目记得不是特别清楚了,大致描述。 一 2021.04.17荣耀机试 1 数组排序 题目描述:输入多个数字,按数字从小到大排序。 输入描述 多个个正整数,保证都在int范围内,用空格隔开 输出描述 10个数字,其从大到小的值,用空格隔开,最后一个数字后不加空格 输入样例 15 2 4 8 7 9 3 输出样例 2 3 4 7 8 9 15 2 蛇形字符串 https://blog.csdn.net/qq_41291253/article/details/90474150 题目

奋斗的菜鸟ing 1万+

python绘制三维图

利用matplotlib.figure.Figure创建一个图框:

m0_59485658的博客 2629

【时序列】时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 详细理解python sm.tsa.seasonal_decompose

【时序列】时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 详细理解python sm.tsa.seasonal_decompose 在做时序列分析的时候,好多教程都告诉你要把时序列分解成趋势,季节性,残差,然后画图看一下有没有趋势变化,有没有季节性。像这样: import statsmodels.api as sm decomposition = sm.tsa.seasonal_decompose(train['Count'] ,model='add

weixin_47442572的博客 2万+

ADC电路项目1——10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8

包括详细仿真文档,原理介绍,完整电路图,仿真参数已设好,可直接使用,在自己的电脑上就可以运行仿真。本设计采用 smic18mmrf CMOS 工艺,使用栅压自举电路的采样开关,Vcm-based 开关。电容开关控制电路,10 位 DFF,最后用 10 位理想 DAC 模块将数字码转换为 10 进制量进。时序上级板采样的 DAC 电容阵列,两级动态比较器,比较器异步时钟,SAR 动态逻辑,DAC。10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8。

qq_48407979的博客 814

【js日期格式化】js获取当前时间,2021-05-21 13:15:28 、2021-05-21 、2021-05-21 13:15 等格式

之前做项目时封装的方法,分享出来,可以获取到 2021-05-21 13:15:28 、2021-05-21 、2021-05-21 13:15 等格式的时间字符串。 /** * 获取当前时间 * @params length 截取的长度 * @return stringDate 字符串时间 * $getCurrentDate() => 2021-05-21 13:15:28 * $getCurrentDate(10) => 2021-05-21 * $getCurrentDate

qq_39576711的博客 932

阿里云大模型ACP认证模拟考试(三)

【摘要】:在阿里云大模型高级工程师 ACP 认证暂无真题题库的现状下,模拟题具有重要意义。其依照真实考试设计,涵盖题型、题量与分值分布,助力考生熟悉考试框架,合理分配答题时间精力,提升效率。同时,模拟题紧扣官方课程,能帮助考生精准定位知识盲点,如大模型架构原理和通义千问应用实践等重点内容,以便针对性完善知识体系。此外,通过练习模拟题,考生可掌握不同题型的解题思维与技巧,快速洞察复杂题目本质,提高答题准确率。

davidkorhenn的博客 3579

DS SIMULIA CST STUDIO SUITE 2021.05 SP5

CST Studio Suite 2021.05 - 发行说明 此补丁是推荐更新,其中包括以下更正和改进。 许可 CST Studio Suite Frontend 包括 CST Studio Suite Bio Models 和 CST Studio Suite Multi-Platform (Linux) 升级,无需额外付费。CST Studio Suite Bio Models 和 CST Studio Suite Multi-Platform Upgrade 将不再作为 CST Studio Su.

微波家园 1365

《QMT量化实战系列》支持自定义筛选与排序的多因子策略,实测年化收益超100% (1)

公众号推出《QMT量化实战》系列,通过多维度、多策略、多场景讲解QMT量化平台应用,每期附代码解读。本期复现《支持自定义筛选与排序的多因子策略》,策略包含三大核心模块:1. 通过Tushare获取30+财务因子数据;2. 提供灵活筛选机制(支持排除ST股、次新股及特定板块);3. 创新性多因子加权排序系统(支持自定义因子权重组合)。交易逻辑包含动态调仓机制,当持仓标的排名低于阈值时触发卖出。该策略具有高度可配置性,适合不同风险偏好的投资者。(149字)

qq_46262068的博客 1730

如何使用windows搭建一个公网ftp/sftp服务器

在有公网ip的情况下,使用windows系统搭建一个ftp/sftp服务器会带来很多的方便,可以实现远程移动端的一键式访问,对于文件的备份、多设备的共享都十分的方便。然而网上许多的教程都是基于windows自带的iis搭建一个局域网ftp服务器,然而在搭建好后,我想要通过端口映射的方式实现在外网访问时,却发现连接不上的问题,感觉可能是因为windows家庭版的原因导致的。因此在查阅很多资料之后终于找到了一个公网ftp/sftp服务器的搭建方式,实测可用。这里把流程记录一下,做一个备忘录,也方便大家搭建。

weixin_43354138的博客 1万+

2021-04-05

从零开始学习java 目标:大厂暑期实习+日常实习 日期:2021.04.05

scanf10086的博客 71

FPGA工程师必看:JESD204B同步机制实战指南(含SYSREF信号调试技巧)

本文为FPGA工程师提供了一份JESD204B同步机制的实战指南,重点聚焦于SYSREF信号的调试技巧。文章从同步的核心逻辑出发,深入剖析了时钟、SYSREF与对齐序列这“三驾马车”的协作,并详细阐述了硬件PCB布局、FPGA IP核配置、状态机监控以及使用示波器进行波形分析等关键实战步骤,旨在帮助工程师解决多通道高速系统中的同步难题,确保链路的稳定与确定性延迟。

weixin_29239661的博客 330

2021-05-24

<soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:p=“http://service.webservice.epc.cimc.com”>     soapenv:Bod

chengxianjie的博客 178

利用树莓派制作智能音箱

利用树莓派制作智能音箱

qq_61803022的博客 1777

SAP_ABAP_SD_BAPI清单案例教程——销售订单开票_BAPI_BILLINGDOC_CREATEMULTIPLE_VF01_S4版本

SAP BAPI(Business Application Programming Interface)是SAP系统中的一组规范和标准,用于从SAP系统中获取数据、输入数据和更新数据。这些API允许开发者以编程方式与SAP系统交互,而无需编写大量的自定义代码。2.1 Copy代码 直接可使用。2.2 VF01开票。

java_zhong1990的专栏 2214

2021-05-14

123 气

m0_46120166的博客 92

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

2021-05-09

六级阅读错的我心慌,一连一串,阅读从来都没有错成这样过,还是单词不熟,真菜真菜真菜,嘤嘤嘤,全力复习一个月,保佑保佑六级一次550+,600真是可望不可即,不过感觉这次复习六级可是比四级认真了许多,也能集中精力了,可能潜意识认为重要,也可能害怕下次没报上刷不了分,六级要把题做完,单词背完,天天听听力我真是菜!!! 我要我要网编Android99+,书上的每个代码全要敲完,我爱网编Android !!! ...

weixin_45825917的博客 245

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

2021-05-03

cdwtsh1的博客 61

2021-05-08

qq_56414494的博客 83

2021-05-13

2. 3. 4. 5. 6. 7.

qq_56724164的博客 83

2021-05-31

m0_57963698的博客 85

2021-05-19

GentleMoonlightWinds的博客 126
上一篇: 2021-04-28
下一篇: 2021-05-09
中北编程底线
博客等级 码龄6年 17粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值