零基础机器学习|线性回归

一、数据收集和预处理

1、读取可视化

使用pandas库导入csv(逗号相隔开的文件)pd.read_csv()

import pandas as pd
df_ads = pd.read_csv("本地文件地址D:\…\双斜线表示“)

使用head()读出数据表格的前5行

df_ads.head()

2、相关分析

导入画图工具库 matplotlib 和统计学可视化库 seaborn 画出热力图

import matplotlib.pyplot as plt
import seaborn as sns
sns.heatmap(df_ads.corr(),cmap = “YlGnBu”,annot = True)
plt.show()

3、散点图

aspect = 1 长宽相同

sns.pairplot(df_ads,x_vars=[‘wechat’,‘weibo’,‘others’],y_vars=‘sales’,
height = 4, aspect = 1 ,kind = ‘scatter’)
plt.show()

3、预处理

1)导入数据

X = np.array(df_ads)
y = np.array(df_ads.sales)

2)删除标签

axis = 0 列
axis = 1 行

X = np.delete(数据, 标签个数 , axis = 1)

3)数据矩阵化

区分张量和向量的区别
数据导入进来时,是数组但是我们需要它为张量方便做乘法计算
用reshape的方法把向量转化成矩阵

X = X.reshape((len(x),1))
y = y.reshape((len(y),1))

二、拆分训练集和测试集

使用sklearn.model_selection 中的函数

from sklearn.model_selection import train_test_split

拆分处理, test_size 比例是0.2 ,random_state每次运行得到相同 的训练和测试数据

X_train, X_test,y_train,y_test = train_test_split(X, y, test_size = 0.2,random_state = 0)

三、数据归一化

自定义定义函数完成公式
X = X − m i n ( X ) m a x ( X ) − m i n ( X ) X = { \frac {X-min(X)}{max(X) - min(X)}} X=max(X)min(X)Xmin(X)

def scaler (train, test):min_value = train.min(axis = 0)max_value = train.max(axis = 0)gap = max_value - min_valuetrain -= min_valuetrain /= gaptest -= min_valuetest /= gapreturn train, test

四、损失函数

自定义一下函数计算
L ( w , b ) = M S E = 1 2 N ∑ ( x , y ) ∈ D ( y − h ( x ) ) 2 L(w,b) =MSE = {\frac{1}{2N} \sum_{(x,y)\in D}(y-h(x))^2} L(w,b)=MSE=2N1(x,y)D(yh(x))2

def loss_fuction(X,y,weight,bias):y_hat = weight*X + biasloss = y_hat - ycost = np.sum(loss**2) / (2*len(X))return cost#损失函数的值

五、梯度下降

使用以下公式计算梯度,数学微积分联系的比较紧密,可以好好看看数学
梯度 = 1 2 N ∑ i = 1 N ( y ( i ) − ( w ∗ x ( i ) ) ) ∗ x ( i ) 梯度 = {\frac {1}{2N}\sum_{i=1}^N(y^{(i)}-(w*x^{(i)}))*x^{(i)}} 梯度=2N1i=1N(y(i)(wx(i)))x(i)
更新权重
w = w − α N ∑ i = 1 N ( y ( i ) − ( w ∗ x ( i ) ) ) ∗ x ( i ) w = w-{\frac{\alpha}{N}\sum_{i=1}^N(y^{(i)}-(w*x^{(i)}))*x^{(i)}} w=wNαi=1N(y(i)(wx(i)))x(i)

def graient_descent(X, y, weight, bias, lr, iteration):#lr为步长,iteration:迭代次数l_history = np.zeros(iteration)#创建一个全0 长度为iteration 的数组w_history = np.zeros(iteration)b_history = np.zeros(iteration)for i in range (iteration):y_hat = weight * X + biasloss = y_hat - yderivation_weight = X.T.dot(loss)/len(X) #计算权重的梯度 ,derivation_bias = sum(loss)*1/len(X)#计算偏置梯度weight = weight - lr*derivation_weight #现W=原W-学习速率(多块速度下降)乘以权重梯度(导数)bias =bias - lr*derivation_biasl_history[i] = loss_fuction(X,y,weight,bias)w_history[i] = weightb_history[i] = biasreturn l_history, w_history, b_history

六、调用封装线性回归的函数

自定义线性回归函数 ,包含梯度下降,梯度下降中包含损失函数,并计算预测的准确率

def linear_regression(X, y, weight, alpha, iterations):loss_history, weight_history = gradient_descent(X, y,weight,alpha, iterations)print("训练最终损失:", loss_history[-1]) # 打印最终损失y_pred = X.dot(weight_history[-1]) # 进行预测traning_acc = 100 - np.mean(np.abs(y_pred - y))*100 # 计算准确率print("线性回归训练准确率: {:.2f}%".format(traning_acc))  # 打印准确率return loss_history, weight_history # 返回训练历史记录

七、定义迭代次数,学习率,初始权重(优化,调参)

iterations = 300; # 迭代300次
alpha = 0.15; #学习速率设为0.15
weight = np.array([0.5,1,1,1]) # 权重向量,w[0] = bias
#计算一下初始值的损失
print ('当前损失:',loss_function(X_train, y_train, weight))

八、损失函数图像观察

观察随着迭代次数的增加,损失的数值是否减少

plt.plot(loss_history,'g--',label = 'Loss Curve')
plt.xlabel('Iteration')
plt.ylabel('loss')
plt.legend()
plt.show()

九、预测未来

输入X对应特征的数据,预测y销售量
提前保留没有被更改的X原始数据

def min_max_gap(train):min_val = train.min(axis = 0)max_val = train.max(axis = 1)gap = max_val - min_valreturn min_val,max_val,gap
y_min , y_max,y_gap = min_max_gap(y_train)

提前定义最大最小函数,方便后续还原归一化后的数据

X_train_original = X_train.copy()

注意要将归一化后的数据还原

X_plan = [250,50,50] # 要预测的X特征数据
X_train,X_plan = scaler(X_train_original,X_plan) # 对预测数据也要归一化缩放
X_plan = np.append([1], X_plan ) # 加一个哑特征X0 = 1
y_plan = np.dot(weight_history[-1],X_plan)
y_value = y_plan*y_gap + y_min # y_gap是当前y_train中最大值和最小值的差,y_min是最小值
print ("预计商品销售额: ",y_value, "千元")

十、完整代码

import numpy as np #导入NumPy数学工具箱
import pandas as pd #导入Pandas数据处理工具箱
df_ads = pd.read_csv('F:\\MachineLearning_testData\\advertising.csv')
df_ads.head()X = np.array(df_ads) # 构建特征集,含全部特征
X = np.delete(X, [3], axis = 1) # 删除掉标签
y = np.array(df_ads.sales) #构建标签集,销售金额
print ("张量X的阶:",X.ndim)
print ("张量X的形状:", X.shape)
print (X)y = y.reshape(-1,1) #通过reshape函数把向量转换为矩阵,-1就是len(y),返回样本个数
print ("张量y的形状:", y.shape)from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2, random_state=0)
def scaler(train, test): # 定义归一化函数 ,进行数据压缩# 数据的压缩min = train.min(axis=0) # 训练集最小值max = train.max(axis=0) # 训练集最大值gap = max - min # 最大值和最小值的差train -= min # 所有数据减最小值train /= gap # 所有数据除以大小值差test -= min #把训练集最小值应用于测试集test /= gap #把训练集大小值差应用于测试集return train, test # 返回压缩后的数据def min_max_gap(train):  # 计算训练集最大,最小值以及他们的差,用于后面反归一化过程min = train.min(axis=0)  # 训练集最小值max = train.max(axis=0)  # 训练集最大值gap = max - min  # 最大值和最小值的差return min, max, gapy_min, y_max, y_gap = min_max_gap(y_train)
X_train_original = X_train.copy() # 保留一份训练集数据副本,用于对要预测数据归一化
X_train,X_test = scaler(X_train,X_test) # 对特征归一化
y_train,y_test = scaler(y_train,y_test) # 对标签也归一化
x0_train = np.ones((len(X_train),1)) # 构造X_train长度的全1数组配合对Bias的点积
X_train = np.append(x0_train, X_train, axis=1) #把X增加一系列的1
x0_test = np.ones((len(X_test),1)) # 构造X_test长度的全1数组配合对Bias的点积
X_test = np.append(x0_test, X_test, axis=1) #把X增加一系列的1
print ("张量X的形状:", X_train.shape)
print (X_train)
def loss_function(X, y, W): # 手工定义一个MSE均方误差函数,W此时是一个向量y_hat = X.dot(W.T) # 点积运算 h(x)=w_0*x_0 + w_1*x_1 + w_2*x_2 + w_3*x_3loss = y_hat.reshape((len(y_hat),1))-y # 中间过程,求出当前W和真值的差异cost = np.sum(loss**2)/(2*len(X)) # 这是平方求和过程, 均方误差函数的代码实现return cost # 返回当前模型的均方误差值
def gradient_descent(X, y, W, lr, iterations): # 定义梯度下降函数l_history = np.zeros(iterations) # 初始化记录梯度下降过程中损失的数组W_history = np.zeros((iterations,len(W))) # 初始化权重数组for iter in range(iterations): # 进行梯度下降的迭代,就是下多少级台阶y_hat = X.dot(W.T) # 这个是向量化运行实现的假设函数loss = y_hat.reshape((len(y_hat),1))-y # 中间过程, y_hat和y真值的差derivative_W = X.T.dot(loss)/len(X) #求出多项式的梯度向量derivative_W = derivative_W.reshape(len(W))W = W - lr*derivative_W # 结合下降速率更新权重l_history[iter] = loss_function(X, y, W) # 损失的历史记录W_history[iter] = W # 梯度下降过程中权重的历史记录return l_history, W_history # 返回梯度下降过程数据
#首先确定参数的初始值
iterations = 300; # 迭代300次
alpha = 0.15; #学习速率设为0.15
weight = np.array([0.5,1,1,1]) # 权重向量,w[0] = bias
#计算一下初始值的损失
print ('当前损失:',loss_function(X_train, y_train, weight))
# 定义线性回归模型
def linear_regression(X, y, weight, alpha, iterations):loss_history, weight_history = gradient_descent(X, y,weight,alpha, iterations)print("训练最终损失:", loss_history[-1]) # 打印最终损失y_pred = X.dot(weight_history[-1]) # 进行预测traning_acc = 100 - np.mean(np.abs(y_pred - y))*100 # 计算准确率print("线性回归训练准确率: {:.2f}%".format(traning_acc))  # 打印准确率return loss_history, weight_history # 返回训练历史记录
# 调用刚才定义的线性回归模型
loss_history, weight_history = linear_regression(X_train, y_train,weight, alpha, iterations) #训练机器
print("权重历史记录:", weight_history)
print("损失历史记录:", loss_history)X_plan = [250,50,50] # 要预测的X特征数据
X_train,X_plan = scaler(X_train_original,X_plan) # 对预测数据也要归一化缩放
X_plan = np.append([1], X_plan ) # 加一个哑特征X0 = 1
y_plan = np.dot(weight_history[-1],X_plan) # [-1] 即模型收敛时的权重
# 对预测结果要做反向缩放,才能得到与原始广告费用对应的预测值
y_value = y_plan*y_gap + y_min # y_gap是当前y_train中最大值和最小值的差,y_min是最小值
print ("预计商品销售额: ",y_value, "千元")

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

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

相关文章

Vue前端框架如何调用天聚数行API?

Vue是一个业内优秀的前端解决方案,采用了最新流行的MVVM框架模式,深受web前端开发者的喜爱,在相关开发者社区也一直都是热门交流话题。那么,如何通过Vue调用天行数据的API接口呢,下面就具体给大家示例。 vue采用的是数…

数字零售力航母-看微软如何重塑媒体

数字零售力航母-看微软如何重塑媒体 - 从2024全美广播协会展会看微软如何整合营销媒体AI技术和AI平台公司 2024年,微软公司联合英伟达总司,赞助全美广播协会展会。本次展会微软通过搭建一个由全面的合作伙伴生态系统支持的可信和安全的平台,…

TCP和UDP协议的区别

1、定义 TCP协议的全称是Transmission Control Protocol(传输控制协议),是一种面向连接的点对点的传输层协议。 UDP协议的全称是User Datagram Protocal(用户数据报协议),为应用程序提供一种无需建立连接…

手机从0基础到精通拍摄,拍摄手法0基础教学,快速入门

课程下载:https://download.csdn.net/download/m0_66047725/89064797 更多资源下载:关注我。 课程内容: 1 为什么学拍摄剪辑.mp4 2 如何选择手机.mp4 3 补光灯的作用.mp4 !三角支架的作用.mp4 5 麦克风的作用.mp4 6 帧率清晰度参数.m…

Hive进阶

目录 一、MapReduce的计算过程 二、Yarn的资源调度 yarn的资源调度策略 三、Hive的语法树 四、Hive配置优化 五、数据开发 六、数据仓库 七、数据仓库开发流程 八、数仓分层 九、ETL和ELT 一、MapReduce的计算过程 分布式计算框架 需要编写代码执行,执行时…

Edge的使用心得与深度探索:优化浏览体验的技巧与建议

随着互联网的快速发展,浏览器已经成为我们日常生活中不可或缺的工具之一。在众多浏览器中,微软Edge凭借其稳定性、安全性和功能丰富性备受用户青睐。本文将深入探讨Edge浏览器的各种功能与技巧,帮助用户优化其浏览体验。 文章目录 Edge翻译插…

【无标题】axios的ts封装,记录一下(Vue3项目)

request.ts: // 参考:https://www.jb51.net/article/282238.htm import axios from axiosconst instance axios.create({baseURL: https://api.apiopen.top/api })// 添加请求拦截器 instance.interceptors.request.use(function (config) {// 在发送请求之前做些…

iOS 全平台矢量动画库:体积小巧、功能丰富 | 开源日报 No.227

airbnb/lottie-ios Stars: 24k License: NOASSERTION lottie-ios 是一个用于在 iOS 平台上本地渲染 After Effects 矢量动画的库。 该项目主要功能、关键特性、核心优势包括: 跨平台支持:可在 iOS, macOS, tvOS, visionOS, Android 和 Web 上使用实时渲…

ASP.NET医院手麻信息系统源码 .NET6.0+VUE

目录 麻醉记录单 复苏记录单 麻醉文书 手术麻醉信息 1、 体征监控记录 2、 麻醉用药信息 3、 手术事件登记 4、 手术状态变更 5、 麻醉医师交接 6、 其他辅助操作 手麻信息系统是以服务围术期临床业务工作的开展为核心,通过与床边监护设备以及医院H…

【数据库】MySQL之union联合查询

联合查询: 关键字union,作用就是将多条查询语句的结果合并成一个结果集。 案例:(查询部门编号大于100或名字中含有a字符的员工信息) select * from employees where department_id>100 or last_name like %a%; 用联合查询演…

OpenCV从入门到精通实战(五)——dnn加载深度学习模型

从指定路径读取图像文件、利用OpenCV进行图像处理,以及使用Caffe框架进行深度学习预测的过程。 下面是程序的主要步骤和对应的实现代码总结: 1. 导入必要的工具包和模型 程序开始先导入需要的库os、numpy、cv2,同时导入utils_paths模块&…

Objective-C网络数据捕获:使用MWFeedParser库下载Stack Overflow示例

概述 Objective-C开发中,网络数据捕获是一项常见而关键的任务,特别是在处理像RSS源这样的实时网络数据流时。MWFeedParser库作为一个优秀的解析工具,提供了简洁而强大的解决方案。本文将深入介绍如何利用MWFeedParser库,以高效、…

关键里程碑:自然语言处理的发展历程

关键里程碑:自然语言处理的发展历程 自然语言处理(NLP)是计算机科学和人工智能的一个分支,致力于使计算机能够理解和处理人类语言。以下是NLP发展过程中的一些关键里程碑: 1950s & 60s:NLP的基础 1954…

【学习笔记二十】EWM TU运输单元业务概述及后台配置

一、EWM TU运输单元业务流程概述 TU是指车辆和运输单元在货场中,移动车辆或运输单元。 车辆是特定运输方式的专用化工具,车辆可以包含一个或多个运输单元,并代表运输车辆的实际实体。 运输单元是用于运输货物的车辆的最小可装载单位,运输单元可以是车辆的固定部分。 …

设计模式|组合模式(Composite Pattern)

文章目录 什么是组合模式?主要角色举例组织关系树操作系统的文件夹与文件代码示例:文件系统优缺点优点缺点组合模式VS递归什么是组合模式? 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示部分-整体的层次结构。这种模式使得客户端…

高仿小米商城用户端

高仿小米商城用户端(分为商城前端(tongyimall-vue)和商城后端(tongyimall-api)两部分),是Vue SpringBoot的前后端分离项目,用户端包括首页门户、商品分类、首页轮播、商品展示、商品推荐、购物车、地址管理、下订单、扫码支付等功能模块。 …

AndroidStudio 导出aar包,并使用

打包 1、确认当前选项是否勾选,如未勾选请先勾选。 2、勾选完成后重启Android Studio。 3、重启完成后,选中要打包的module 4、打包完成 使用 1.在项目中新建libs,放入aar文件。 2.修改配置 添加如下代码 flatDir {dirs("libs")}3.修改app…

档案集中管理的痛点怎么解决?

档案集中管理可能面临的痛点包括以下几个方面: 1. 档案分类和整理困难:档案集中管理会面临大量档案的分类和整理工作,可能导致混乱和困难。 解决方法: - 建立统一的档案分类规范和流程,确保所有档案都能按照规定的方式…

PMP报考别跟风!搞懂这些问题不踩坑!

1.PMP是什么? 1.PMP(Project ManagementProfessional)的中文全称是项目管理专业人士资格认证。该认证是由美国项目管理协会PMI在全球206个国家发起的针对项目经理的资格认证。 2.PMP认证是目前国际上项目管理领域认可度和含金量最高的证书。通过PMP就证明你的项目…

性能测试--数据库慢 SQL 语句分析

一 慢 SQL 语句的几种常见诱因 1. 无索引或索引失效 ​ 当查询基于一个没有索引的列进行过滤、排序或连接时,数据库可能被迫进行全表扫描,即逐行检查所有数据,导致性能显著下降。 ​ 虽然我们很多时候建立了索引,但在一些特定的…