机器学习1:单变量线性回归

编程入门 行业动态 更新时间:2024-10-27 20:29:42

机器学习1:单变量<a href=https://www.elefans.com/category/jswz/34/1768154.html style=线性回归"/>

机器学习1:单变量线性回归

一、说明

        线性回归是深度学习、神经网络的基础,因而在这里尤其重要。注意初学者需要关注的问题是,节点参数,损失函数,梯度下降等一般性知识。 

二、分析一个最简单的线性场景

        在庞大而热闹的数据科学马戏团中,线性回归就像走钢丝的人一样出现。它平静而优雅,在一条细长的预测线上摇摇欲坠,每一步都根据基础数据点的拉力巧妙地调整。作为观众,我们不仅被奇观所震撼,而且被使这一行为如此迷人的精确性和平衡所震撼。这种植根于几个世纪数学思想的走钢丝统计行为现在占据了中心舞台。来,让我们仔细看看。

三、铺设线性回归的基础 

        每场演出都是从搭建舞台开始的。在线性回归中,我们的阶段是回归线。这条线的特征在于其方程y = mx + b,其中m是斜率,b是 y 截距,表示基于输入特征的结果的预测值。

import numpy as np
import matplotlib.pyplot as plt# Prepare train data
train_X = np.linspace(-1, 1, 100)
train_Y = -2 * train_X + np.random.randn(*train_X.shape) * 0.33 + 10

        在这里,我们尝试mpg根据各种车型的weight( ) 来预测其燃油效率 ( ) wt。这奠定了我们绳索的基础。

四、重力的影响:数据点的权重

        重力是一种看不见但始终存在的力量,它决定了我们走钢丝的人如何移动。同样,数据点引导我们的回归线的路径。每个点都会发挥其作用,决定我们预测的轨迹。一个点离我们的线越近,它的影响力就越强。

        为了在我们的模型上可视化这些数据:

import numpy as np
import matplotlib.pyplot as plt# Prepare train data
train_X = np.linspace(-1, 1, 100)
train_Y = -2 * train_X + np.random.randn(*train_X.shape) * 0.33 + 10
w = 0
b = 0
for i in range(60000):det = 2*(train_Y - train_X*w -b)pasw = np.dot(train_X.T,det)pasb = sum(det)w = w + 0.001*paswb = b + 0.001*pasb
print(w,b)
plt.plot(train_X,train_Y,"+")
plt.plot(train_X,train_X.dot( w ) + b )
plt.show()

        该图描绘了一幅图画:红线优雅地在数据中导航,每个点都充当引导其路径的力量。

五、步骤和调整:优化模型

5.1 基于sk-learn实现

        我们的走钢丝者不仅仅是行走。每一步都会进行重新校准,进行微小的调整以保持平衡。在数据科学领域,我们的模型也经历了类似的改进。每次迭代的目的都是做出更接近事实的预测。

from sklearn import linear_model
import matplotlib.pyplot as plt
import numpy as np
lr = linear_model.LinearRegression()
boston = datasets.load_boston()
y = boston.target# cross_val_predict returns an array of the same size as `y` where each entry
# is a prediction obtained by cross validation:
predicted = cross_val_predict(lr, boston.data, y, cv=20)
W = np.column_stack( (y, predicted) )
#print( W )fig, ax = plt.subplots()
ax.scatter(y, predicted)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()

        数据分区和重采样模仿步行者的练习,确保表演真正开始时,每一步都尽可能准确。

5.2 基于tensorflow实现

        同样的实现,用tensorflow实现:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt# Prepare train data
train_X = np.linspace(-1, 1, 100)
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.33 + 10# Define the model
X = tf.placeholder("float")
Y = tf.placeholder("float")
w = tf.Variable(0.0, name="weight")
b = tf.Variable(0.0, name="bias")
loss = tf.square( Y - X*w - b )
train_op = tf.train.GradientDescentOptimizer(0.001).minimize(loss)# Create session to run
with tf.Session() as sess:sess.run(tf.initialize_all_variables())epoch = 1for i in range(100):for (x, y) in zip(train_X, train_Y):_, w_value, b_value = sess.run([train_op, w, b],feed_dict={X: x,Y: y})print("Epoch: {}, w: {}, b: {}".format(epoch, w_value, b_value))epoch += 1#draw
plt.plot(train_X,train_Y,"+")
plt.plot(train_X,train_X.dot(w_value)+b_value)
plt.show()

六、安全网:评估模型准确性

        无论技术多么熟练,每个走钢丝的人都重视安全网。对于我们的线性回归模型,这个网络是由指标编织而成的。这些数字可以捕捉到任何失误,提供有关哪里失去平衡以及哪里保持平衡的见解。

重新采样后,我们可以评估模型在各个方面的性能:

<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f9f9f9"><span style="color:#242424">rmse_val <- metric_set(rmse)<span style="color:#5c2699">metric_set</span>(rmse)
结果<-fit_resampled%>% <span style="color:#5c2699">collect_metrics</span>()
average_rmse<-结果%>%<span style="color:#aa0d91">过滤器</span>(.metric==“rmse”)%>%<span style="color:#5c2699">拉</span>(平均值)<span style="color:#5c2699">打印</span>(average_rmse)
# <span style="color:#1c00cf">4.129034</span></span></span></span></span>

在此评估中,RMSE 量化了我们模型的平均偏差。我们提取的 RMSE 值可以让您深入了解模型的性能。具体来说,RMSE 表示观察到的已知结果值与模型预测值之间的平均差异。较小的 RMSE 表明我们的模型具有更好的预测准确性。相反,较大的 RMSE 暗示了潜在的改进领域。考虑到数据集的背景mtcars,如果我们的 RMSE 徘徊在 5 左右,则表明我们的预测与实际值平均偏差约为每加仑 5 英里。这可以衡量我们模型的精度和可靠性。

线性回归的核心是一种舞蹈——艺术与科学之间的平衡。它涉及了解过去、预测未来以及找到数据和决策之间的微妙平衡。当我们利用诸如 之类的强大工具时tidymodels,这种舞蹈变得更加细致、更加优雅。让我们庆祝这位古老的统计表演者,愿我们的数据始终找到平衡。

七、可以使用线性回归的 5 个现实案例

  • 房地产定价:

描述:房地产经纪人经常使用线性回归来根据各种特征(例如卧室数量、地块面积、与便利设施的接近程度、房产的年龄等)来预测房屋的售价。通过分析历史数据,他们可以为卖家和买家提供更准确的价格估算。

  • 股市预测:

描述:金融分析师可能会根据过去的表现、经济指标或其他相关变量,采用线性回归来预测未来的股票价格。它有助于做出更明智的投资决策。

  • 零售业需求预测:

描述:零售企业可以根据历史销售数据和营销支出、季节性趋势和竞争对手定价等其他因素来预测未来的产品需求。这有助于库存管理和优化供应链运营。

  • 医疗保健结果预测:

描述:在医疗保健领域,线性回归可用于根据各种指标预测患者的结果。例如,医生可以根据饮食、药物剂量和身体活动来预测患者的血糖水平,从而帮助制定个性化的治疗计划。

  • 薪资预测:

描述:人力资源部门经常利用线性回归来理解和预测多年经验与薪资之间的关系,确保他们提供有竞争力的薪酬来留住和吸引人才。

附录:基于pandas的代码 

# 一、导入所需库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号# 二、构造矩阵data = pd.read_csv("linear_regression.csv")
data.insert(0,'ones',1)
n = data.shape[1]
x = data.iloc[:,:n-1]
y = data.iloc[:,n-1:]x = np.matrix(x)
y = np.matrix(y)
w = np.array([0,0]).reshape(1,2)# 三、构造目标函数、损失函数、代价函数#其实不需要写 在代价函数中有体现 我只是拿来复习一下理论知识
def obiect_function(x,w):''':param x: 特征矩阵:param w: 权重矩阵:return: 返回目标函数的值'''return x*w.T#其实不需要写 在代价函数中有体现 我只是拿来复习一下理论知识
def loss_function(x,y,w):''':param x:特征矩阵一个样本值:param w: 权重矩阵:param y: 对应x的实际值:return: 返回一个样本的损失函数值'''return x*w.T-y#代价函数 也是梯度下降要针对的函数
def cost_function(x,y,w):''':param x: 特征矩阵:param w: 权重矩阵:param y: 实际值矩阵:return: 返回代价函数的值'''#一共有m个样本m = x.shape[0]return np.sum(np.power(x*w.T-y,2))/(2*m)
# 四、梯度下降
def gradient_descent(x,y,w,alpha,iters):''':param x: 特征矩阵:param y: 实际值:param w: 权重矩阵:param alpha: 步长:param iters: 迭代次数:return: 返回迭代之后的权重矩阵w和每次迭代之后的代价函数的值组成的数组cost'''temp = np.zeros(w.shape)x_len = x.shape[0]w_len = w.shape[1]cost = np.zeros(iters)for i in range(iters):error = x*w.T-yfor j in range(w_len):temp[0,j] =w[:,j] - sum(np.multiply(error,x[:,j]))*(alpha/x_len)w = tempcost[i] = cost_function(x,y,w)return w,costalpha = 0.01
iters = 1000
w,cost = gradient_descent(x,y,w,alpha,iters)# 五、绘制预测收益和实际收益图
# plt.figure(figsize=(12,8))
# plt.scatter(data["人口"],data['收益'],label = '实际值')
# plt.xlabel("人口")
# plt.ylabel("收益")
# plt.title("人口收益预测模型图")
#
# c = np.linspace(min(data["人口"]),max(data['人口']),100)
# f = [w[0,0]+w[0,1]* i for i in c]
#
# plt.plot(c,f,label = "预测模型",color = "r")
# plt.legend()
# plt.show()# 六、绘制迭代次数和代价函数关系图
plt.plot(range(1,iters+1),cost,label = '迭代次数和代价函数关系')
plt.xlabel("迭代次数")
plt.ylabel('代价函数')
plt.title('迭代次数和代价函数关系图')
plt.legend()
plt.show()

更多推荐

机器学习1:单变量线性回归

本文发布于:2024-02-07 09:37:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1755446.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:线性   变量   机器

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!