线性回归--最小二乘法+梯度下降算法+sklearn库

线性回归

 

一元:

(1)手工最小二乘法

import numpy as np
a=np.loadtxt("homespace_price",delimiter=',',dtype=float)
homespace=a[:,0]
price=a[:,1]
x_avg=np.average(homespace)
y_avg=np.average(price)
xfang_avg=np.average(homespace*homespace)
xy_avg=np.average(homespace*price)
w=(xy_avg-x_avg*y_avg)/(xfang_avg-(x_avg*x_avg))
b=y_avg-w*x_avg
price_predict=w*55+b
print("预测55平方米的房子价格:%f" %price_predict)

(2)sklearn自带的LinearRegression

from sklearn.linear_model import LinearRegression as LR
import sklearn.preprocessing as pr
import numpy as np
a=np.loadtxt("data",delimiter=',',dtype=float)
X=a[:,0].reshape(-1,1)
Y=a[:,1].reshape(-1,1)
scaler=pr.StandardScaler()
scaler.fit(X)
#归一化自变量
x_train=scaler.transform(X)
x_test=scaler.transform(np.array([55]).reshape(1,-1))
modle=LR()
modle.fit(x_train,Y)
print(modle.predict(x_test))
print(modle.coef_)  # Coefficient of the features 决策函数中的特征系数
print(modle.intercept_)  # 又名bias偏置,若设置为False,则为0

(3)梯度下降算法

1/m是个常数可以包括在学习率a中不用单独写

核心公式

不用矩阵

import numpy as np
it=1000#迭代次数
a=0.0001#学习率(步长)
f=np.loadtxt("houseprice",dtype=float,delimiter=',')
x_train=f[:,0:1].reshape(-1,1)
y_train=f[:,1].reshape(-1,1)
num = f.shape[0]
k=1
b=0
#迭代1000次
for i in range(it):td=0for j in range(num):td+=k*x_train[j][0]+b-y_train[j][0]#相当于求和所有差距k=k-(a*td*x_train[j])/numb=b-(a*td)/num
print(k*55+b)

用矩阵

import numpy as np
a=0.0001#学习率
it=1000#迭代次数
f=np.loadtxt("houseprice",delimiter=",",dtype=float)
x_train1=np.concatenate((np.ones((f.shape[0],1)),f[:,0].reshape(-1,1)),axis=1)
y_train1=f[:,1].reshape(-1,1)
w=np.array([0.0,0.0]).reshape(-1,1)
for i in range(it):#迭代td=x_train1.dot(w)-y_train1w=w-a*x_train1.T.dot(td)
x_test1=np.array([1,55]).reshape(1,-1)
print(x_test1.dot(w))

多元:

(1)手动最小二乘法

最左边一列补充上全1

import numpy as np
a=np.loadtxt("salaryage",delimiter=',',dtype=int)
X=a[:,0:2].reshape(-1,2)
Y=a[:,2].reshape(-1,1)
X_train=np.concatenate((np.ones((a.shape[0],1)),X),axis=1)#增加一列1以后的训练集
w=np.linalg.inv(X_train.T.dot(X_train)).dot(X_train.T.dot(Y))
X_test=np.array([1,18000,50]).reshape(1,-1)
y_predict=X_test.dot(w)
print(y_predict)

(2)sklearn里面的LinearRegression

import numpy as np
import sklearn.preprocessing as pre
from sklearn.linear_model import LinearRegression
a=np.loadtxt("salaryage1",dtype=int,delimiter=',')
xtrain=a[:,0:2].reshape(-1,2)
ytrain=a[:,2].reshape(-1,1)
scaler=pre.StandardScaler()
# #标准化
scaler.fit(xtrain)
x_test=np.array([18000,50]).reshape(1,-1)
x_test=scaler.transform(x_test)
xtrain=scaler.transform(xtrain)
#线性回归
modle=LinearRegression()
modle.fit(xtrain,ytrain)
print(modle.predict(x_test))

 (3)梯度下降算法

关键是因为这里的两个自变量因为量纲不同所以需要先归一化去除单位影响

除此之外这里计算步骤如一元用矩阵那个

import numpy as np# 数据
data = np.array([[4000, 25, 20000],[8000, 30, 70000],[5000, 28, 35000],[7500, 33, 50000],[12000, 40, 85000]
])# 特征和标签
x = data[:, :2]
y = data[:, 2].reshape(-1, 1)# 数据标准化(Z-score标准化)
x_mean = np.mean(x, axis=0)
x_std = np.std(x, axis=0)
x = (x - x_mean) / x_std
print(x)
# 添加一列全为1的列向量,用于截距项
x = np.concatenate((np.ones((x.shape[0], 1)), x), axis=1)# 初始化参数
w = np.zeros((x.shape[1], 1))# 学习率
alpha = 0.001
# 迭代次数
it = 1000# 样本数量
n = x.shape[0]# 梯度下降迭代
for i in range(it):# 计算梯度gradient =   x.T.dot(x.dot(w) - y)# 更新参数w = w - alpha * gradient# 新数据(工资18000,工龄50)
new_data = np.array([18000, 50]).reshape(1, -1)
# 对新数据进行同样的标准化处理
new_data = (new_data - x_mean) / x_std
new_data = np.concatenate((np.ones((new_data.shape[0], 1)), new_data), axis=1)# 预测
prediction = new_data.dot(w)
print("预测的贷款额度为:", prediction[0][0])

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

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

相关文章

震惊!AI编程正在淘汰这5类人,你在其中吗?

大家好,我是狂师。 今天在知乎上看到一个关于讨论:“人工智能大爆发,AI编程工具对程序员到底是颠覆还是辅助?’”问题,觉得蛮有意思。的确,AI编程的出现,引发了人们对于程序员职业未来的广泛讨论,有人担忧它可能会颠覆程序员的职业, 今天分享一些个人观点。先说结论:…

viewport meta 标记

在移动端网页开发中,viewport meta 标记是优化显示效果的关键。它定义了浏览器可视区域的宽度和缩放比例,常用于适配不同设备屏幕。 默认情况下,移动浏览器会将网页放入一个虚拟的 viewport(如 980px),然后缩放到设备屏幕(如 375px),导致内容显得很小。例如,一个宽度…

如何用Forest方便快捷地在SpringBoot项目中对接DeepSeek

​一. 环境要求JDK 8 / 17SpringBoot 2.x / 3.xForest 1.6.4+Fastjson2依赖配置 除了 SpringBoot 和 Lombok 等基础框架之外,再加上 Forest 和 Fastjson2 的依赖<!-- Forest框架 --> <dependency><groupId>com.dtflys.forest</groupId><artifactId…

5. MySQL 存储引擎(详解说明)

5. MySQL 存储引擎(详解说明) @目录5. MySQL 存储引擎(详解说明)1. 查看存储引擎2. 设置系统默认的存储引擎3. 设置表的存储引擎3.1 创建表时指定存储引擎3.2 修改表的存储引擎4. 引擎介绍4.1 InnoDB 引擎:具备外键支持功能的事务存储引擎4.2 MyISAM 引擎:主要的非事务处…

130道基础OJ编程题之: 68~77

130道基础OJ编程题之: 68~77 @目录130道基础OJ编程题之: 68~7768:BC72 平均身高69:BC74 HTTP状态码70:BC75 数字三角形71:BC76 公务员面试72:BC77 有序序列插入一个数73:BC78 筛选法求素数74: BC79 图像相似度75: BC80 登录验证76: BC85 包含数字9的数77:BC86 奇偶统计最后:68…

如何选择既能支持稳定传输 又适配信创环境的文件传输系统?

在日常工作开展中,财政局作为政府单位中负责财政收支、预算管理和财务监督的重要部门,在文件传输方面存在多种场景及需求。财政局会存在与其他政府部门间协作,向上级财政部门传输文件以及财政局各部门间传输预算报告、财务报告等场景,需要实现快速、准确的流转。财政局一般…

本地新建js公用库组件并打包发布到npm仓库详细说明

有时候,我们想在本地开发一个公用js函数组件库,并上传到npm仓库供开发者使用,本文就详细介绍了从新建本地项目到发布至npm仓库的整过过程,供大家学习!1、注册账号 首先我们去npm官网注册一个账号,注册成功后请牢记账号和密码。 需要注意的是,现在npm登录好像启用了双因素…

51CTO:《DeepSeek入门宝典(全4册)》 - 官方完整版 - PDF免费下载

由51CTO智能研究院、51CTO传媒、51CTO学堂联合倾力打造了这份《DeepSeek入门宝典》,这份DeepSeek宝典共分为四册:《技术解析篇》、《开发实战篇》、《个人使用篇》、《行业应用篇》,长达80余页。它涵盖了技术解析、开发实战、个人使用以及行业应用等多个维度,是帮助每一位通…

Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!

在众多开源项目中,高颜值、功能强大且部署简单的项目往往更能俘获开发者的心。然而,实际部署 Web 应用时,面对数据库、缓存、消息队列等复杂的依赖关系,常常令人头疼。Docker 的开源为我们普及了容器化技术,能够快速打包和部署 Web 应用,让一切变得轻松简单。但当你从开发…

到底是谁还没搞清楚 OMS 和 WMS的区别?

聊到 OMS(订单管理系统) 和 WMS(仓库管理系统),很多人第一反应是:“不就是订单和仓库嘛?谁还分不清?” 但等到真正操作的时候,很多企业就开始搞混了:“WMS 不是也能管库存吗?为什么还要 OMS?” “OMS 负责订单,那 WMS 发货的时候为啥还要管订单?” “库存到底是 …

VMware ESXi 8.0U2d macOS Unlocker OEM BIOS 标准版和厂商定制版

VMware ESXi 8.0U2d macOS Unlocker & OEM BIOS 标准版和厂商定制版VMware ESXi 8.0U2d macOS Unlocker & OEM BIOS 标准版和厂商定制版 ESXi 8.0U2 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、…

当AI学会“读心”,浙大DeepSeek第三期掌握AI分布式学习,多场景下的「超级外挂」!

当AI学会“读心”,浙大DeepSeek第三期掌握AI分布式学习,多场景下的「超级外挂」!"当AI不仅能写诗画画,还能参与社会治理,我们的世界会变成什么样?"最近浙大的DeepSeek公开课第三期,直接把这个问题抛给了大众。这场线上讲座一边拆解大模型的技术内核、展示如何…