机器学习与深度学习——自定义函数进行线性回归模型

这篇具有很好参考价值的文章主要介绍了机器学习与深度学习——自定义函数进行线性回归模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

机器学习与深度学习——自定义函数进行线性回归模型分析(波士顿房价)

目的与要求

1、通过自定义函数进行线性回归模型对boston数据集前两个维度的数据进行模型训练并画出SSE和Epoch曲线图,画出真实值和预测值的散点图,最后进行二维和三维度可视化展示数据区域。
2、通过自定义函数进行线性回归模型对boston数据集前四个维度的数据进行模型训练并画出SSE和Epoch曲线图,画出真实值和预测值的散点图,最后进行可视化展示数据区域。

步骤

1、先载入boston数据集 Load Iris data
2、分离训练集和设置测试集split train and test sets
3、对数据进行标准化处理Normalize the data
4、自定义损失函数
5、使用梯度下降算法训练线性回归模型
6、初始化模型参数
7、训练模型
8、对训练集和新数据进行预测
9、画出SSE和Epoch折线图
10、画出真实值和预测值的散点图
11、进行可视化

代码

1、通过自定义函数进行线性回归模型对boston数据集前两个维度的数据进行模型训练并画出SSE和Epoch曲线图,画出真实值和预测值的散点图,最后进行二维和三维度可视化展示数据区域。

#引入所需库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 读取数据
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
x = data[:,:2] # 只使用前两个特征进行线性回归
y = target.reshape(-1,1)

#自定义函数进行线性回归
def compute_cost(X, y, theta):
    """
    计算损失函数(平均误差平方和)
    """
    m = len(y)
    predictions = X.dot(theta)
    cost = (1/(2*m)) * np.sum(np.square(predictions-y))
    return cost

def gradient_descent(X, y, theta, learning_rate, num_epochs):
    """
    使用梯度下降算法训练线性回归模型
    """
    m = len(y)
    cost_history = np.zeros(num_epochs)
    theta_history = np.zeros((num_epochs, theta.shape[0]))
    
    for epoch in range(num_epochs):
        predictions = X.dot(theta)
        errors = predictions - y
        theta = theta - (1/m) * learning_rate * (X.T.dot(errors))
        
        cost = compute_cost(X, y, theta)
        cost_history[epoch] = cost
        theta_history[epoch,:] = theta.T
    
    return theta, cost_history, theta_history

#对输入特征进行标准化
mean_x = np.mean(x, axis=0)          #求出每一列特征的平均值
std_x = np.std(x, axis=0)            #求出每一列特征的标准差。
x = (x - mean_x) / std_x           #将每一列特征进行标准化,即先将原始数据减去该列的平均值,再除以该列的标准差,这样就能得到均值为0,标准差为1的特征 
X = np.hstack([np.ones((len(x),1)), x]) # 添加一列全为1的特征,表示截距项

# 初始化模型参数
theta = np.zeros((X.shape[1],1))

# 训练模型
learning_rate = 0.01
num_epochs = 1000
theta, cost_history, theta_history = gradient_descent(X, y, theta, learning_rate, num_epochs)

# 对训练集进行预测
predictions = X.dot(theta)
predictions[:10]

# 对新数据进行预处理
new_data = np.array([[0.01, 18]]) # 假设新数据是 CRIM=0.01,ZN=18
new_data = (new_data - mean_x) / std_x
new_X = np.hstack([np.ones((1,1)), new_data]) # 添加截距项

# 使用训练出的模型参数进行预测
new_predictions = new_X.dot(theta)
new_predictions
print('预测的房价为:${:.7f}'.format(float(new_predictions)*1000))

# 画出Epoch曲线图
#将每个特征在训练过程中更新的参数θ的变化情况绘制出来,可以看到不同特征在训练过程中的变化趋势
plt.figure()
plt.plot(range(num_epochs), theta_history[:, 0], label='theta0')
plt.plot(range(num_epochs), theta_history[:, 1], label='theta1')
plt.show()

# 画出SSE和Epoch折线图
plt.figure(figsize=(10,5))
plt.plot(range(num_epochs), cost_history)
plt.xlabel('Epoch')
plt.ylabel('SSE')
plt.title('SSE vs. Epoch')
plt.show()

# 画出预测值与真实值的比较图
plt.figure(figsize=(10,5))
plt.scatter(y, predictions)
plt.xlabel('True Values')
plt.ylabel('Predictions')
plt.title('True Values vs. Predictions')
plt.show()

# 画出数据二维可视化图
plt.figure(figsize=(10,5))
plt.scatter(x[:,0], y)
plt.xlabel('CRIM')
plt.ylabel('MEDV')
plt.title('CRIM vs. MEDV')
plt.show()

# 画出数据三维可视化图
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x[:,0], x[:,1], y)
ax.set_xlabel('CRIM')
ax.set_ylabel('ZN')
ax.set_zlabel('MEDV')
ax.set_title('CRIM-ZN vs. MEDV')
plt.show()

Jupyter截图:
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能

1、通过自定义函数进行线性回归模型对boston数据集前四个维度的数据进行模型训练并画出SSE和Epoch曲线图,画出真实值和预测值的散点图,最后进行可视化展示数据区域。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#载入数据
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
x = data[:,:2]#前2个维度
y = target
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 读取数据
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
x = data[:,:4] # 
y = target.reshape(-1,1)

#自定义函数进行线性回归
def compute_cost(X, y, theta):
    """
    计算损失函数(平均误差平方和)
    """
    m = len(y)
    predictions = X.dot(theta)
    cost = (1/(2*m)) * np.sum(np.square(predictions-y))
    return cost

def gradient_descent(X, y, theta, learning_rate, num_epochs):
    """
    使用梯度下降算法训练线性回归模型
    """
    m = len(y)
    cost_history = np.zeros(num_epochs)
    theta_history = np.zeros((num_epochs, theta.shape[0]))
    
    for epoch in range(num_epochs):
        predictions = X.dot(theta)
        errors = predictions - y
        theta = theta - (1/m) * learning_rate * (X.T.dot(errors))
        
        cost = compute_cost(X, y, theta)
        cost_history[epoch] = cost
        theta_history[epoch,:] = theta.T
    
    return theta, cost_history, theta_history

#对输入特征进行标准化
mean_x = np.mean(x, axis=0)          #求出每一列特征的平均值
std_x = np.std(x, axis=0)            #求出每一列特征的标准差。
x = (x - mean_x) / std_x           #将每一列特征进行标准化,即先将原始数据减去该列的平均值,再除以该列的标准差,这样就能得到均值为0,标准差为1的特征 
X = np.hstack([np.ones((len(x),1)), x]) # 添加一列全为1的特征,表示截距项

# 初始化模型参数
theta = np.zeros((X.shape[1],1))

# 训练模型
learning_rate = 0.01
num_epochs = 1000
theta, cost_history, theta_history = gradient_descent(X, y, theta, learning_rate, num_epochs)
# 画出Epoch曲线图
#将每个特征在训练过程中更新的参数θ的变化情况绘制出来,可以看到不同特征在训练过程中的变化趋势
plt.figure()
plt.plot(range(num_epochs), theta_history[:, 0], label='theta0')
plt.plot(range(num_epochs), theta_history[:, 1], label='theta1')
plt.plot(range(num_epochs), theta_history[:, 2], label='theta2')
plt.plot(range(num_epochs), theta_history[:, 3], label='theta3')
plt.show()


# 对训练集进行预测
predictions = X.dot(theta)
predictions[:10]

# 对新数据进行预处理
new_data = np.array([[ 0.01,18,2.310,0]]) # 假设新数据是 CRIM=0.01,ZN=18,INDUS=2.310,CHAS=0
new_data = (new_data - mean_x) / std_x
new_X = np.hstack([np.ones((1,1)), new_data]) # 添加截距项

# 使用训练出的模型参数进行预测
new_predictions = new_X.dot(theta)
new_predictions
print('预测的房价为:${:.7f}'.format(float(new_predictions)*1000))
# 画出SSE曲线图
plt.figure()
plt.plot(range(num_epochs), cost_history)
plt.xlabel('Epoch')
plt.ylabel('SSE')
plt.title('SSE vs. Epoch')
plt.show()
# 画出预测值与真实值的比较图
plt.figure(figsize=(10,5))
plt.scatter(y, predictions)
plt.xlabel('True Values')
plt.ylabel('Predictions')
plt.title('True Values vs. Predictions')
plt.show()

# 可视化前四个维度的数据
#前四个维度数据的可视化图像。其中横轴为第一个特征CRIM,纵轴为第二个特征ZN,纵轴为第三个特征INDUS,点的颜色为第四个特征的值。
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x[:, 0], x[:, 1], x[:, 2], c=x[:, 3], cmap='cool')
ax.set_xlabel('CRIM')
ax.set_ylabel('ZN')
ax.set_zlabel('INDUS')
plt.title('Boston Housing Data')
plt.show()

Jupyter截图:
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能

部分解析:
1、通过自定义函数进行线性回归模型对boston数据集前两个维度的数据进行模型训练并画出SSE和Epoch曲线图,画出真实值和预测值的散点图,最后进行二维和三维度可视化展示数据区域。

机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
画出SSE(误差平方和)随Epoch(迭代次数)的变化曲线图,用来评估模型训练的效果。在每个Epoch,模型都会计算一次预测值并计算预测值与实际值之间的误差(即损失),然后通过梯度下降算法更新模型参数,使得下一次预测的误差更小。随着Epoch的增加,SSE的值会逐渐减小,直到收敛到一个最小值。
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
2、通过自定义函数进行线性回归模型对boston数据集前四个维度的数据进行模型训练并画出SSE和Epoch曲线图,画出真实值和预测值的散点图,最后进行可视化展示数据区域。
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
画出SSE(误差平方和)随Epoch(迭代次数)的变化曲线图,用来评估模型训练的效果。在每个Epoch,模型都会计算一次预测值并计算预测值与实际值之间的误差(即损失),然后通过梯度下降算法更新模型参数,使得下一次预测的误差更小。随着Epoch的增加,SSE的值会逐渐减小,直到收敛到一个最小值。
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
机器学习与深度学习——自定义函数进行线性回归模型,机器学习与深度学习,大数据可视化,大数据,机器学习,深度学习,线性回归,大数据,人工智能
使用梯度下降算法训练线性回归模型的基本思路是:先随机初始化模型参数θ,然后通过迭代调整参数θ,使得损失函数的值尽量小。模型训练完成后,我们可以用训练好的模型对新的数据进行预测。文章来源地址https://www.toymoban.com/news/detail-538094.html

到了这里,关于机器学习与深度学习——自定义函数进行线性回归模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习&&深度学习——线性回归的从零开始实现

    虽然现在的深度学习框架几乎可以自动化实现下面的工作,但从零开始实现可以更了解工作原理,方便我们自定义模型、自定义层或自定义损失函数。 根据带有噪声的线性模型构造一个人造数据集。任务是使用这个数据集来恢复模型的参数。我们使用低维数据,可以更容易地

    2024年02月15日
    浏览(39)
  • 【机器学习】线性回归模型详解

    PS:本文有一定阅读门槛,如果有不明白的地方欢迎评论询问! 接下来我们将要学习我们的第一个模型——线性回归。比如说我需要根据数据预测某个面积的房子可以卖多少钱 接下来我们会用到以下符号: m:训练样本数量 x:输入值,又称为属性值 y:输出值,是我们需要的结果

    2024年02月03日
    浏览(62)
  • 机器学习10—多元线性回归模型

    在市场的经济活动中,经常会遇到某一市场现象的发展和变化取决于几个影响因素的情况,也就是一个因变量和几个自变量有依存关系的情况。而且有时几个影响因素主次难以区分,或者有的因素虽属次要,但也不能略去其作用。例如,某一商品的销售量既与人口的增长变化

    2023年04月24日
    浏览(47)
  • 【机器学习300问】11、多元线性回归模型和一元线性回归有什么不同?

            在之前的文章中,我们已经学习了一元线性回归模型,其中最关键的参数是w和b。机器学习的目的就是去得到合适w和b后能准确预测未知数据。但现实世界是复杂的,一个事情的发生绝大多数时候不会是一个原因导致。         因此多元线性回归模型区别与一元线

    2024年01月22日
    浏览(45)
  • 【机器学习】P2 线性回归、损失函数与梯度下降

    线性回归简单的说就是线性函数; 线性回归属于机器学习 回归问题; 在线性回归建立的线性关系的模型中,假设目标变量和自变量之间存在一种线性关系,模型的目标是找到最佳的拟合线,是的模型对于未知的数据能够进行最准确的预测; 线性回归模型的一般形式为: y

    2023年04月08日
    浏览(42)
  • 【AI】机器学习——线性模型(逻辑斯蒂回归)

    逻辑回归输出的是实例属于每个类别的似然概率,似然概率最大的类别就是分类结果 在一定条件下,逻辑回归模型与朴素贝叶斯分类器等价 多分类问题可以通过多次二分类或者Softmax回归解决 3. 线性回归模型 4.4 线性分类模型——感知器 目标:用判别模型解决分类问题 4.1.

    2024年02月09日
    浏览(43)
  • 机器学习实战:Python基于LR线性回归进行预测(十)

    注意这里的LR指的是 Linear Regression ,线性回归。而非逻辑回归 Logistic Regression ,虽然二者简称都是LR,但是后者我们还是俗称 Logistic 多点 1.1 LR的介绍 线性回归(Linear Regression)是一种用于建立自变量与连续因变量之间线性关系模型的统计学和机器学习方法。它是最简单、最常

    2024年02月03日
    浏览(39)
  • python机器学习(五)逻辑回归、决策边界、代价函数、梯度下降法实现线性和非线性逻辑回归

    线性回归所解决的问题是把数据集的特征传入到模型中,预测一个值使得误差最小,预测值无限接近于真实值。比如把房子的其他特征传入到模型中,预测出房价, 房价是一系列连续的数值,线性回归解决的是有监督的学习。有很多场景预测出来的结果不一定是连续的,我们

    2024年02月15日
    浏览(88)
  • 机器学习6:使用 TensorFlow 的训练线性回归模型

    纸上得来终觉浅,绝知此事要躬行。前面 5 篇文章介绍了机器学习相关的部分基础知识,在本章,笔者将讲解基于 TensorFlow 实现一个简单的线性回归模型,以便增强读者对机器学习的体感。 目录 1.环境准备 1.1 安装 Python3 1.2 安装 PyCharm 1.3 安装 TensorFlow 1.4 安装 pandas

    2024年02月11日
    浏览(42)
  • 1、动手学深度学习——线性神经网络:线性回归的实现(从零实现+内置函数实现)

    回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域, 回归经常用来表示输入和输出之间的关系 。 给定一个数据集,我们的目标是 寻找模型的权重和偏置 , 使得根据模型做出的预测大体符合数据里的真实价格。 输出的

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包