使用 Python 实现

第一步骤:加载样本数据

# 首先,需要计算x和y的均值
meanX = sum(x) / len(x)
meanY = sum(y) / len(y)

第二步骤:根据学习模型,计算 w,b

# 加载样本数据
# x 是商品房面积
x = [137.97, 104.50, 100.00, 124.32, 79.20, 99.00, 124.00, 114.00,106.69, 138.05, 53.75, 46.91, 68.00, 63.02, 81.26, 86.21]
# y 是房价
y = [145.00, 110.00, 93.00, 116.00, 65.32, 104.00, 118.00, 91.00,62.00, 133.00, 51.00, 45.00, 78.50, 69.65, 75.69, 95.30]# 学习模型——计算w, b
# 首先,需要计算x和y的均值
meanX = sum(x) / len(x)
meanY = sum(y) / len(y)sumXY = 0.0
sumX = 0.0
for i in range(len(x)):# 得到分子sumXY += (x[i] - meanX) * (y[i] - meanY)# 得到分母sumX += (x[i] - meanX) * (x[i] - meanX)w = sumXY/sumX
b = meanY-w*meanXprint("w=", w)  # w= 0.8945605120044221
print("b=", b)  # b= 5.410840339418002print(type(w))  # <class 'float'>
print(type(b))  # <class 'float'>

第三步骤:得到 w 和 b之后,预测房价

#  将待评估的商品房面积放入列表x_test中
x_test = [128.15, 45.00, 141.43, 106.27, 99.00, 53.84, 85.36, 70.00]print("面积\t估计房价")
for i in range(len(x_test)):print(x_test[i], '\t', round(w*x_test[i]+b, 2))  # 精确到小数点后两位
# 输出类型为浮点数类型,Python3中的浮点数类型是64位的双精度浮点数,我们并不需要这么精确的
# 房价, 这里的房价单位是万元, 对于买房子的人来说,精确到小数点后两位就可以了。"""
面积  估计房价
128.15   120.05
45.0     45.67
141.43   131.93
106.27   100.48
99.0     93.97
53.84    53.57
85.36    81.77
70.0     68.03
"""

使用 NumPy 实现

import numpy as np# 加载样本数据
# x 是商品房面积
x = np.array([137.97, 104.50, 100.00, 124.32, 79.20, 99.00, 124.00, 114.00,106.69, 138.05, 53.75, 46.91, 68.00, 63.02, 81.26, 86.21])
# y 是房价
y = np.array([145.00, 110.00, 93.00, 116.00, 65.32, 104.00, 118.00, 91.00,62.00, 133.00, 51.00, 45.00, 78.50, 69.65, 75.69, 95.30])# 学习模型——计算w, b
# 首先,需要计算x和y的均值
# np.mean是NumPy中求均值函数
meanX = np.mean(x)
meanY = np.mean(y)# NumPy支持数组之间的运算,也支持数组和数字之间的广播运算
# 因此这一步可以直接运算, 无需使用循环语句
sumXY = np.sum((x-meanX)*(y-meanY))
sumX = np.sum((x-meanX)*(x-meanX))w = sumXY / sumX
b = meanY - w * meanX# tensorflow中默认的浮点数类型是64位浮点数,这里进行四舍五入,指定输出2位小数。
print("w=", round(w, 2))  # w= 0.89
print("b=", round(b, 2))  # b= 5.41print(type(w))  # <class 'numpy.float64'>
print(type(b))  # <class 'numpy.float64'>#  将待评估的商品房面积放入列表x_test中
x_test = np.array([128.15, 45.00, 141.43, 106.27, 99.00, 53.84, 85.36, 70.00])
y_pred = w*x_test+b# 输出预测的结果
print(y_pred)
"""
[120.04876995  45.66606338 131.92853355 100.47578595  93.9723310353.57397831  81.77052564  68.03007618]
"""
print("面积\t估计房价")# 采用更加友好的方式输出预测的结果
for i in range(y_pred.size):print(x_test[i], '\t', np.round(y_pred[i], 2))
# np.round是NumPy中的四舍五入函数,与Python中的round功能一样
# 精确到小数点后两位
# 房价, 这里的房价单位是万元, 对于买房子的人来说,精确到小数点后两位就可以了。"""
面积  估计房价
128.15   120.05
45.0     45.67
141.43   131.93
106.27   100.48
99.0     93.97
53.84    53.57
85.36    81.77
70.0     68.03
"""

使用 TensorFlow 实现

import tensorflow as tf
import numpy as np# 加载样本数据
# x 是商品房面积
x = tf.constant([137.97, 104.50, 100.00, 124.32, 79.20, 99.00, 124.00, 114.00,106.69, 138.05, 53.75, 46.91, 68.00, 63.02, 81.26, 86.21])
# y 是房价
y = tf.constant([145.00, 110.00, 93.00, 116.00, 65.32, 104.00, 118.00, 91.00,62.00, 133.00, 51.00, 45.00, 78.50, 69.65, 75.69, 95.30])# 学习模型——计算w, b
# 首先,需要计算x和y的均值
# tf.reduce_mean是tensorflow中求均值函数
meanX = tf.reduce_mean(x)
meanY = tf.reduce_mean(y)# tensorflow也支持数组之间的运算,也支持数组和数字之间的广播运算
# 因此这一步可以直接运算, 无需使用循环语句
sumXY = tf.reduce_sum((x - meanX) * (y - meanY))
sumX = tf.reduce_sum((x - meanX) * (x - meanX))w = sumXY / sumX
b = meanY - w * meanXprint(type(w))  # <class 'tensorflow.python.framework.ops.EagerTensor'>
print(type(b))  # <class 'tensorflow.python.framework.ops.EagerTensor'># tensorflow中默认的浮点数类型是32位浮点数
print("w=", w)  # w= tf.Tensor(0.8945604, shape=(), dtype=float32)
print("b=", b)  # b= tf.Tensor(5.4108505, shape=(), dtype=float32)# Tensor对象.numpy()的作用是将张量转换为NumPy数组
print("w=", w.numpy())  # w= 0.8945604
print("b=", b.numpy())  # b= 5.4108505#  将待评估的商品房面积放入列表x_test中
x_test = tf.constant([128.15, 45.00, 141.43, 106.27, 99.00, 53.84, 85.36, 70.00])
y_pred = w * x_test + b# 输出预测的结果
print(y_pred)
"""
tf.Tensor(
[120.04876   45.66607  131.92853  100.475784  93.97233   53.57398281.77052   68.030075], shape=(8,), dtype=float32)
"""
print("面积\t估计房价")# 如果想要向上面一样采用更加友好的方式输出预测的结果, 需要转换为numpy数组。
# tensorflow中没有 size 这个函数
for i in range(y_pred.numpy().size):print(x_test[i].numpy(), '\t', np.round(y_pred[i].numpy(), 2))
# np.round是NumPy中的四舍五入函数,与Python中的round功能一样
# tensorflow中也有 round 函数"""
面积  估计房价
128.15   120.05
45.0     45.67
141.43   131.93
106.27   100.48
99.0     93.97
53.84    53.57
85.36    81.77
70.0     68.03
"""


最后,一般会使用 NumPy 来读取和访问数据集,接收从CPU输出的中间结果或最终结果,完成数据交换和输入、输出的工作。

数据和模型可视化

综合采用 Pyhton、TensorFlow 和 Matplotlib 来演示。

# 数据和模型可视化
plt.figure()# 绘制散点图,并添加图例
plt.scatter(x, y, color="red", label="销售记录")
plt.scatter(x_test, y_pred, color="blue", label="预测房价")# 使用plot()函数绘制折线图,并添加图例
plt.plot(x_test, y_pred, color="green", label="拟合直线", linewidth=2)# 设置坐标轴标签
plt.xlabel("面积(平方米)", fontsize=14)
plt.ylabel("价格(万元)", fontsize=14)
# 设置坐标轴范围
plt.xlim((40, 150))
plt.ylim((40, 150))plt.suptitle("商品房销售价格评估系统v1.0", fontsize=20)# 自动确定图例生成的最佳位置
plt.legend(loc="upper left")
plt.show()

解析法实现一元线性回归相关推荐

  1. TensorFlow基础3-机器学习基础知识(解析法实现一元线性回归、多元线性回归)

    记录TensorFlow听课笔记 文章目录 记录TensorFlow听课笔记 一,机器学习基础 1.1一元线性回归 1.2解析法实现一元线性回归 1.3解析法实现多元线性回归 二,代码实现一元/多元回 ...

  2. 解析法实现一元线性回归、多元线性回归以及数据模型可视化操作

    目录 [1]解析法实现一元线性回归 python列表实现 利用Numpy实现 利用TensorFlow实现 数据和模型可视化 [2]解析法实现多元线性回归 利用Numpy实现 需要用到的NumPy数组 ...

  3. 利用梯度下降法求解一元线性回归和多元线性回归

    文章目录 原理以及公式 [1]一元线性回归问题 [2]多元线性回归问题 [3]学习率 [4]流程分析(一元线性回归) [5]流程分析(多元线性回归) 归一化原理以及每种归一化适用的场合 一元线性回归代 ...

  4. 机器学习公开课笔记(1):机器学习简介及一元线性回归

    初步介绍 监督式学习: 给定数据集并且知道其正确的输出应该是怎么样的,即有反馈(feedback),分为 回归 (Regressioin): map输入到连续的输出值. 分类 (Classificat ...

  5. UA MATH 571B 回归 QE练习题 一元线性回归理论

    UA MATH 571B 回归 QE练习题 一元线性回归理论 2015/1/5 2015/5/5 2016/5/6 2017/1/5 2017/5/6 这是2015年1月第五题,2015年5月第五题, ...

  6. UA MATH571A 一元线性回归II 统计推断2

    UA MATH571A 一元线性回归II 统计推断2 β0\beta_0β0​的分布 拟合与预测 拟合值的区间估计 预测值的区间估计 数值例子:女性肌肉量与年龄的关系 β0\beta_0β0​的分布 ...

  7. UA MATH571A 一元线性回归IV 模型诊断

    UA MATH571A 一元线性回归IV 模型诊断 解释变量 解释变量的可视化 残差 残差的性质 Semistudentized Residual 残差的可视化 残差关于解释变量的图 残差关于拟合值的 ...

  8. UA MATH571A 一元线性回归III 方差分析与相关性分析

    UA MATH571A 一元线性回归III 方差分析与相关性分析 ANOVA Table F检验 回归系数的F检验 F检验与t检验等价 广义线性检验方法 R2R^2R2 数值例子:女性肌肉量与年龄的关 ...

  9. UA MATH571A 一元线性回归II 统计推断1

    UA MATH571A 一元线性回归II 统计推断1 β1\beta_1β1​的假设检验与置信区间 Gauss-Markov定理 检验的势 双边检验,单边检验与置信区间 置信区间 双边检验 单边检验 ...

最新文章

  1. 1342. 断开的项链【难度: 一般 / 破环成链】
  2. Maven工程的分类
  3. mac搜索服务器文件,ProFind——文件搜索神器
  4. 瑞幸咖啡生,互联网咖啡生;数据死,互联网咖啡死
  5. 青光眼-复内路粘小管成形术(ABiC)-转载
  6. 适配器模式(类适配器)
  7. 数据科学 IPython 笔记本 8.13 自定义刻度
  8. 安卓音量阶数修改_16款手机UI随便用,音量调节原来可以这样玩
  9. 如何保证高可用?java删除文件夹下所有文件,技术详细介绍
  10. Hadoop_23_oozie
  11. mine 规范_2016国家最新设计及验收标准名称汇编GB
  12. 如何卸载twincat3_TwinCAT软件安装FAQ
  13. 山地车中轴进水表现_你一定不知道的自行车中轴知识
  14. 大型医院his系统源码 医院信息管理系统源码 C/S架构
  15. jquery实现登录成功界面_【jQuery实例】Ajax登录页面
  16. LabWindows操作SQL SERVER
  17. HTML---网页编程(1)
  18. MySQL 数据库的基本类型详解(04)
  19. SAM-DETR源码讲解
  20. LeetCode 904. 水果成篮

热门文章

  1. 计算机个人网络研修计划书,信息技术教师个人研修计划书范本
  2. 国产芯片测试软件,测评国产单片机联网芯片
  3. 进出口合同的履行及具体操作程序
  4. JUC高级-0625
  5. note_2019_8
  6. 全球与中国密封件和包装产品市场现状及未来发展趋势
  7. 华为人才在线--华为认证进阶路径
  8. linux终端文字看不清,Linux字体模糊该怎么解决? Linux让字体清晰的教程
  9. 函数式编程范式:函数是一等公民
  10. 基于颜色直方图优化的图像增强方法