机器学习---梯度下降代码

1. 归一化

# Read data from csv
pga = pd.read_csv("pga.csv")
print(type(pga))print(pga.head())

# Normalize the data 归一化值 (x - mean) / (std)
pga.distance = (pga.distance - pga.distance.mean()) / pga.distance.std()
pga.accuracy = (pga.accuracy - pga.accuracy.mean()) / pga.accuracy.std()
print(pga.head())

plt.scatter(pga.distance, pga.accuracy)
plt.xlabel('normalized distance')
plt.ylabel('normalized accuracy')
plt.show()

2. 线性回归 

from sklearn.linear_model import LinearRegression
import numpy as np# We can add a dimension to an array by using np.newaxis
print("Shape of the series:", pga.distance.shape)
print("Shape with newaxis:", pga.distance[:, np.newaxis].shape)# The X variable in LinearRegression.fit() must have 2 dimensions
lm = LinearRegression()
lm.fit(pga.distance[:, np.newaxis], pga.accuracy)
theta1 = lm.coef_[0]
print (theta1)

       这段代码是一个示例,展示了如何使用np.newaxisLinearRegression来进行线性回归。

       首先,通过np.newaxis将一维数组pga.distance添加一个新的维度,从而将其转换为二维数

组。通过打印数组的形状,可以看到在添加np.newaxis之前,pga.distance是一个一维数组,形状

(n,),而添加了np.newaxis之后,形状变为(n, 1)

       然后,创建了一个LinearRegression的实例lm。使用lm.fit()方法,将转换后的特征数据

pga.distance[:, np.newaxis]和目标数据pga.accuracy作为参数,对线性回归模型进行训练拟

合。

       最后,通过lm.coef_获取训练后的模型系数(权重),并将第一个特征的系数赋值给变量

theta1pga.distancepga.accuracy是示例数据,你需要根据实际情况替换为你自己的数据。

3. 代价函数

# The cost function of a single variable linear model# The c 
# 单变量 代价函数
def cost(theta0, theta1, x, y):# Initialize costJ = 0# The number of observationsm = len(x)# Loop through each observation# 通过每次观察进行循环for i in range(m):# Compute the hypothesis # 计算假设h = theta1 * x[i] + theta0# Add to costJ += (h - y[i])**2# Average and normalize costJ /= (2*m)return J# The cost for theta0=0 and theta1=1
print(cost(0, 1, pga.distance, pga.accuracy))theta0 = 100
theta1s = np.linspace(-3,2,100)
costs = []
for theta1 in theta1s:costs.append(cost(theta0, theta1, pga.distance, pga.accuracy))plt.plot(theta1s, costs)
plt.show()

       一个简单的单变量线性回归模型的代价函数实现,并且计算了在给定一组参数theta0theta1

的情况下的代价。在这段代码中,cost()函数接受四个参数:theta0theta1是线性模型的参数,

x是输入特征,y是目标变量。函数的目标是计算模型的代价。

       首先,初始化代价J为0。然后,通过循环遍历每个观察值,计算模型的预测值h。代价J通过累

加每个观察值的误差平方来计算。最后,将代价J除以观察值的数量的两倍,以平均和归一化代

价。在这段代码的后半部分,使用一个给定的theta0值和一组theta1值,计算每个theta1对应的代

价,并将结果存储在costs列表中。然后,使用plt.plot()theta1scosts进行绘制,显示出代

价函数随着theta1的变化而变化的趋势。

4. 绘制三维图

import numpy as np
from mpl_toolkits.mplot3d import Axes3D# Example of a Surface Plot using Matplotlib
# Create x an y variables
x = np.linspace(-10,10,100)
y = np.linspace(-10,10,100)# We must create variables to represent each possible pair of points in x and y
# ie. (-10, 10), (-10, -9.8), ... (0, 0), ... ,(10, 9.8), (10,9.8)
# x and y need to be transformed to 100x100 matrices to represent these coordinates
# np.meshgrid will build a coordinate matrices of x and y
X, Y = np.meshgrid(x,y)
#print(X[:5,:5],"\n",Y[:5,:5])# Compute a 3D parabola 
Z = X**2 + Y**2 # Open a figure to place the plot on
fig = plt.figure()
# Initialize 3D plot
ax = fig.gca(projection='3d')
# Plot the surface
ax.plot_surface(X=X,Y=Y,Z=Z)plt.show()# Use these for your excerise 
theta0s = np.linspace(-2,2,100)
theta1s = np.linspace(-2,2, 100)
COST = np.empty(shape=(100,100))
# Meshgrid for paramaters 
T0S, T1S = np.meshgrid(theta0s, theta1s)
# for each parameter combination compute the cost
for i in range(100):for j in range(100):COST[i,j] = cost(T0S[0,i], T1S[j,0], pga.distance, pga.accuracy)# make 3d plot
fig2 = plt.figure()
ax = fig2.gca(projection='3d')
ax.plot_surface(X=T0S,Y=T1S,Z=COST)
plt.show()

 

       使用Matplotlib绘制三维图形,包括一个二次曲面图和一个代价函数的图。

       首先,通过使用np.linspace()函数,创建了从-10到10的等间距的100个点,分别赋值给变量

xy

       接下来,使用np.meshgrid()函数将xy转换为100x100的网格矩阵,分别赋值给XY。这

样,XY矩阵中的每个元素表示一个(x, y)坐标对。

       然后,根据二次曲面方程Z = X**2 + Y**2计算出Z矩阵,其中Z矩阵中的每个元素表示对应坐

标点的高度。

       通过plt.figure()创建一个新的图形,并通过fig.gca(projection='3d')初始化一个三维图形

的坐标系。使用ax.plot_surface()函数绘制曲面图,其中XYZ分别表示X、Y和Z矩阵。

       最后,使用plt.show()显示图形。

       在后半部分的代码中,首先创建了两个包含100个均匀分布数值的数组theta0stheta1s,分

别表示theta0和theta1的取值范围。

       接下来,使用np.empty()创建一个空的100x100的数组COST,用于存储代价函数的计算结果。

通过使用np.meshgrid()函数,将theta0stheta1s转换为网格矩阵T0ST1S

       然后,通过两个嵌套的循环遍历所有可能的参数组合,并使用cost()函数计算每个参数组合对

应的代价,并将结果存储在COST数组中。

       最后,使用plt.figure()创建一个新的图形,并通过fig.gca(projection='3d')初始化一个三

维图形的坐标系。使用ax.plot_surface()函数绘制代价函数的曲面图,其中XYZ分别表示

T0ST1SCOST矩阵。使用plt.show()显示图形。

5. 求导函数

线性回归模型的偏导数公式可以通过最小化代价函数推导得到。以下是推导过程:

线性回归模型假设函数为:h(x) = theta0 + theta1 * x

代价函数为均方差函数(Mean Squared Error):J(theta0, theta1) = (1/2m) * Σ(h(x) - y)^2

其中,m 是样本数量,h(x) 是模型的预测值,y 是观测值。

为了求解最优的模型参数 theta0 和 theta1,我们需要计算代价函数对这两个参数的偏导数。

首先,计算代价函数对 theta0 的偏导数:

∂J/∂theta0 = (1/m) * Σ(h(x) - y)

然后,计算代价函数对 theta1 的偏导数:

∂J/∂theta1 = (1/m) * Σ(h(x) - y) * x


# 对 theta1 进行求导# 对 thet 
def partial_cost_theta1(theta0, theta1, x, y):# Hypothesish = theta0 + theta1*x# Hypothesis minus observed times xdiff = (h - y) * x# Average to compute partial derivativepartial = diff.sum() / (x.shape[0])return partialpartial1 = partial_cost_theta1(0, 5, pga.distance, pga.accuracy)
print("partial1 =", partial1)# 对theta0 进行求导
# Partial derivative of cost in terms of theta0
def partial_cost_theta0(theta0, theta1, x, y):# Hypothesish = theta0 + theta1*x# Difference between hypothesis and observationdiff = (h - y)# Compute partial derivativepartial = diff.sum() / (x.shape[0])return partialpartial0 = partial_cost_theta0(1, 1, pga.distance, pga.accuracy)
print("partial0 =", partial0)

       计算代价函数对参数theta1theta0的偏导数。

       首先,定义了一个名为partial_cost_theta1()的函数,接受四个参数:theta0theta1是线

性模型的参数,x是输入特征,y是目标变量。这个函数用于计算代价函数对theta1的偏导数。在函

数内部,首先计算假设值h,然后计算(h-y)*x,得到假设值与观察值之间的差异乘以输入特征x

最后,将这些差异的和除以输入特征的数量,得到对theta1的偏导数。然后,通过调用

partial_cost_theta1()函数并传入参数05,计算出对应的偏导数partial1

        接下来,定义了一个名为partial_cost_theta0()的函数,接受四个参数:theta0

theta1是线性模型的参数,x是输入特征,y是目标变量。这个函数用于计算代价函数对theta0的偏

导数。在函数内部,首先计算假设值h,然后计算假设值与观察值之间的差异。最后,将这些差异

的和除以输入特征的数量,得到对theta0的偏导数。然后,通过调用partial_cost_theta0()函数

并传入参数11,计算出对应的偏导数partial0

6. 梯度下降

# x is our feature vector -- distance
# y is our target variable -- accuracy
# alpha is the learning rate
# theta0 is the intial theta0 
# theta1 is the intial theta1
def gradient_descent(x, y, alpha=0.1, theta0=0, theta1=0):max_epochs = 1000 # Maximum number of iterations 最大迭代次数counter = 0       # Intialize a counter 当前第几次c = cost(theta1, theta0, pga.distance, pga.accuracy)  ## Initial cost 当前代价函数costs = [c]     # Lets store each update 每次损失值都记录下来# Set a convergence threshold to find where the cost function in minimized# When the difference between the previous cost and current cost #        is less than this value we will say the parameters converged# 设置一个收敛的阈值 (两次迭代目标函数值相差没有相差多少,就可以停止了)convergence_thres = 0.000001  cprev = c + 10   theta0s = [theta0]theta1s = [theta1]# When the costs converge or we hit a large number of iterations will we stop updating# 两次间隔迭代目标函数值相差没有相差多少(说明可以停止了)while (np.abs(cprev - c) > convergence_thres) and (counter < max_epochs):cprev = c# Alpha times the partial deriviative is our updated# 先求导, 导数相当于步长update0 = alpha * partial_cost_theta0(theta0, theta1, x, y)update1 = alpha * partial_cost_theta1(theta0, theta1, x, y)# Update theta0 and theta1 at the same time# We want to compute the slopes at the same set of hypothesised parameters#             so we update after finding the partial derivatives# -= 梯度下降,+=梯度上升theta0 -= update0theta1 -= update1# Store thetastheta0s.append(theta0)theta1s.append(theta1)# Compute the new cost# 当前迭代之后,参数发生更新  c = cost(theta0, theta1, pga.distance, pga.accuracy)# Store updates,可以进行保存当前代价值costs.append(c)counter += 1   # Count# 将当前的theta0, theta1, costs值都返回去return {'theta0': theta0, 'theta1': theta1, "costs": costs}print("Theta0 =", gradient_descent(pga.distance, pga.accuracy)['theta0'])
print("Theta1 =", gradient_descent(pga.distance, pga.accuracy)['theta1'])
print("costs =", gradient_descent(pga.distance, pga.accuracy)['costs'])descend = gradient_descent(pga.distance, pga.accuracy, alpha=.01)
plt.scatter(range(len(descend["costs"])), descend["costs"])
plt.show()

 

       使用梯度下降法求解线性回归模型中的偏导数以及更新参数的过程。其中,gradient_descent

函数接受输入特征 x 和观测值 y,以及学习率 alpha、初始参数 theta0 和 theta1。在函数中,设

置了最大迭代次数 max_epochs 和收敛阈值 convergence_thres,用于控制算法的停止条件。初始

时,计算了初始的代价函数值 c,并将其存储在 costs 列表中。

       在迭代过程中,使用偏导数的公式进行参数更新,即 theta0 -= update0 和 theta1 -=

update1。同时,计算新的代价函数值 c,并将其存储在 costs 列表中。最后,返回更新后的参数

值 theta0 和 theta1,以及代价函数值的变化过程 costs

       最后,调用了 gradient_descent 函数,并打印了最终的参数值和代价函数值。然后,绘制了

代价函数值的变化过程图。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/85196.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 数据类型总结

整形数据类型 1字节 8bit 2^8256

Mongodb:业务应用(1)

环境搭建参考&#xff1a;mongodb&#xff1a;环境搭建_Success___的博客-CSDN博客 需求&#xff1a; 在文章搜索服务中实现保存搜索记录到mongdb 并在搜索时查询出mongdb保存的数据 1、安装mongodb依赖 <dependency><groupId>org.springframework.data</groupI…

【办公自动化】使用Python一键提取PDF中的表格到Excel

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

当编程遇上AI,纵享丝滑

目录 前言 一、提出需求 二、检查代码 三、进一步提出需求 总结 前言 自从CHATGPT火了以后&#xff0c;我发现我身边的人再也不怕写报告了&#xff0c;什么个人总结&#xff0c;汇报材料&#xff0c;年度总结&#xff0c;伸手就来&#xff08;反正哪些报告也没人看&#x…

腾讯云服务器CVM实例族有什么区别?怎么选?

腾讯云服务器CVM有多种实例族&#xff0c;如标准型S6、标准型S5、SA3实例、高IO型、内存、计算型及GPU型实例等&#xff0c;如何选择云服务器CVM实例规格呢&#xff1f;腾讯云服务器网建议根据实际使用场景选择云服务器CVM规格&#xff0c;例如Web网站应用可以选择标准型S5或S6…

python压缩pdf文件大小

pdf文件过大&#xff0c;经常会是一个问题&#xff0c;但是市面上基本上都是收费的工具&#xff0c;wps需要开会员才能使用。因此找了一个python库进行试验&#xff1a; 首先需要安装 pip install aspose-pdf 运行的代码&#xff1a; import aspose.pdf as apcompressPdfDo…

k8s ingress获取客户端客户端真实IP

背景 在Kubernetes中&#xff0c;获取客户端真实IP地址是一个常见需求。这是因为在负载均衡架构中&#xff0c;原始请求的源IP地址会被替换成负载均衡器的IP地址。 获取客户端真实IP的需求背景包括以下几点&#xff1a; 安全性&#xff1a;基于客户端IP进行访问控制和认证授…

【TensorFlow】P0 Windows GPU 安装 TensorFlow、CUDA Toolkit、cuDNN

Windows 安装 TensorFlow、CUDA Toolkit、cuDNN 整体流程概述TensorFlow 与 CUDA ToolkitTensorFlow 是一个基于数据流图的深度学习框架CUDA 充分利用 NIVIDIA GPU 的计算能力CUDA Toolkit cuDNN 安装详细流程整理流程一&#xff1a;安装 CUDA Toolkit步骤一&#xff1a;获取CU…

Spring Boot对接Oracle数据库

Spring Boot对接Oracle数据库 最近学习了Oracle数据库&#xff0c;那么如何使用Spring Boot和MyBatis Plus对接Oracle数据库呢&#xff1f; 这就有了这篇随记&#xff0c;具体流程如下 1、创建Maven工程 创建一个空的Maven工程&#xff0c;导入如下依赖&#xff1a; <?…

Python数据分析实战-列表字符串、字符串列表、字符串的转化(附源码和实现效果)

实现功能 str([None,master,hh]) ---> [None,"master","hh"] ---> "None,master,hh" 实现代码 import re import astx1 str([None,master,hh]) print(x1)x2 ast.literal_eval(x1) print(x2)x3 ",".join(str(item) for item…

微服务与Nacos概述-3

流量治理 在微服务架构中将业务拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff0c;但是由于网络原因或者自身的原因&#xff0c;服务并不能保证服务的100%可用&#xff0c;如果单个服务出现问题&#xff0c;调用这个服务就会出现网络延迟&#xff0c;此时…

Gopeed-全平台开源高速下载器 支持(HTTP、BitTorrent、Magnet)协议

一、软件介绍 Gopeed&#xff08;全称 Go Speed&#xff09;&#xff0c;是一款由GolangFlutter开发的高速下载器&#xff0c;开源、轻量、原生&#xff0c;支持&#xff08;HTTP、BitTorrent、Magnet 等&#xff09;协议下载&#xff0c;并且支持全平台使用&#xff0c;底层使…

Java【算法 04】HTTP的认证方式之DIGEST认证详细流程说明及举例

HTTP的认证方式之DIGEST 1.是什么2.认值流程2.1 客户端发送请求2.2 服务器返回质询信息2.2.1 质询参数2.2.2 质询举例 2.3 客户端生成响应2.4 服务器验证响应2.5 服务器返回响应 3.算法3.1 SHA-2563.1.1 Response3.1.2 A13.1.3 A2 3.2 MD53.2.1 Request-Digest3.2.2 A13.2.3 A2…

Exams/ece241 2013 q4

蓄水池问题 S3 S2 S1 例如&#xff1a;000 代表 无水 &#xff0c;需要使FR3, FR2, FR1 都打开&#xff08;111&#xff09; S3 S2 S1 FR3 FR2 FR1 000 111 001 011 011 001 111 000 fr代表水变深为…

23款奔驰C260升级原厂香氛负离子系统,清香宜人,久闻不腻

奔驰原厂香氛合理性可通过车内空气调节组件营造芳香四溢的怡人氛围。通过更换手套箱内香氛喷雾发生器所用的香水瓶&#xff0c;可轻松选择其他香氛。香氛的浓度和持续时间可调。淡雅的香氛缓缓喷出&#xff0c;并且在关闭后能够立刻散去。车内气味不会永久改变&#xff0c;香氛…

@Autowired和@Resource注解超详细总结(附代码)

区别 1、来源不同 Autowired 和 Resource 注解来自不同的“父类”&#xff0c;其中Autowired注解是 Spring 定义的注解&#xff0c;而Resource 注解是 Java 定义的注解&#xff0c;它来自于 JSR-250&#xff08;Java 250 规范提案&#xff09;。 2、支持的参数不同 Autowir…

RestTemplate 请求转发异常 ERR_CONTENT_DECODING_FAILED 200 (OK)

#1 问题描述 在基于Spring Boot的项目中实现了请求转发&#xff08;使用 RestTemplate 的 exchange 方法&#xff09;的功能&#xff0c;忽然在前端报net::ERR_CONTENT_DECODING_FAILED 200 (OK)的错误&#xff0c;后端及上游系统日志均显示请求已完成。 #2 原因探寻 上述错…

【ChatGPT 指令大全】怎么使用ChatGPT来辅助学习英语

在当今全球化的社会中&#xff0c;英语已成为一门世界性的语言&#xff0c;掌握良好的英语技能对个人和职业发展至关重要。而借助人工智能的力量&#xff0c;ChatGPT为学习者提供了一个有价值的工具&#xff0c;可以在学习过程中提供即时的帮助和反馈。在本文中&#xff0c;我们…

多用户一体化建设跨境电商小程序、app开发

跨境电商是指通过互联网技术&#xff0c;进行国际贸易的电子商务活动。随着跨境电商的快速发展&#xff0c;许多企业开始关注开发跨境电商小程序和app&#xff0c;以扩大其国际业务。下面是多用户一体化建设跨境电商小程序和app的开发步骤。 第一步&#xff1a;需求分析和规划…

mysql的高可用架构之mmm

目录 一、mmm的相关知识 1&#xff09;mmm架构的概念 2&#xff09;MMM 高可用架构的重要组件 3&#xff09;mmm故障切换流程 二、mmm高可用双主双从架构部署 实验设计 实验需求 实验组件部署 具体实验步骤 步骤一&#xff1a; 搭建 MySQL 多主多从模式 &#…