解析法实现一元线性回归
使用 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()
解析法实现一元线性回归相关推荐
- TensorFlow基础3-机器学习基础知识(解析法实现一元线性回归、多元线性回归)
记录TensorFlow听课笔记 文章目录 记录TensorFlow听课笔记 一,机器学习基础 1.1一元线性回归 1.2解析法实现一元线性回归 1.3解析法实现多元线性回归 二,代码实现一元/多元回 ...
- 解析法实现一元线性回归、多元线性回归以及数据模型可视化操作
目录 [1]解析法实现一元线性回归 python列表实现 利用Numpy实现 利用TensorFlow实现 数据和模型可视化 [2]解析法实现多元线性回归 利用Numpy实现 需要用到的NumPy数组 ...
- 利用梯度下降法求解一元线性回归和多元线性回归
文章目录 原理以及公式 [1]一元线性回归问题 [2]多元线性回归问题 [3]学习率 [4]流程分析(一元线性回归) [5]流程分析(多元线性回归) 归一化原理以及每种归一化适用的场合 一元线性回归代 ...
- 机器学习公开课笔记(1):机器学习简介及一元线性回归
初步介绍 监督式学习: 给定数据集并且知道其正确的输出应该是怎么样的,即有反馈(feedback),分为 回归 (Regressioin): map输入到连续的输出值. 分类 (Classificat ...
- 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月第五题, ...
- UA MATH571A 一元线性回归II 统计推断2
UA MATH571A 一元线性回归II 统计推断2 β0\beta_0β0的分布 拟合与预测 拟合值的区间估计 预测值的区间估计 数值例子:女性肌肉量与年龄的关系 β0\beta_0β0的分布 ...
- UA MATH571A 一元线性回归IV 模型诊断
UA MATH571A 一元线性回归IV 模型诊断 解释变量 解释变量的可视化 残差 残差的性质 Semistudentized Residual 残差的可视化 残差关于解释变量的图 残差关于拟合值的 ...
- UA MATH571A 一元线性回归III 方差分析与相关性分析
UA MATH571A 一元线性回归III 方差分析与相关性分析 ANOVA Table F检验 回归系数的F检验 F检验与t检验等价 广义线性检验方法 R2R^2R2 数值例子:女性肌肉量与年龄的关 ...
- UA MATH571A 一元线性回归II 统计推断1
UA MATH571A 一元线性回归II 统计推断1 β1\beta_1β1的假设检验与置信区间 Gauss-Markov定理 检验的势 双边检验,单边检验与置信区间 置信区间 双边检验 单边检验 ...
最新文章
- 1342. 断开的项链【难度: 一般 / 破环成链】
- Maven工程的分类
- mac搜索服务器文件,ProFind——文件搜索神器
- 瑞幸咖啡生,互联网咖啡生;数据死,互联网咖啡死
- 青光眼-复内路粘小管成形术(ABiC)-转载
- 适配器模式(类适配器)
- 数据科学 IPython 笔记本 8.13 自定义刻度
- 安卓音量阶数修改_16款手机UI随便用,音量调节原来可以这样玩
- 如何保证高可用?java删除文件夹下所有文件,技术详细介绍
- Hadoop_23_oozie
- mine 规范_2016国家最新设计及验收标准名称汇编GB
- 如何卸载twincat3_TwinCAT软件安装FAQ
- 山地车中轴进水表现_你一定不知道的自行车中轴知识
- 大型医院his系统源码 医院信息管理系统源码 C/S架构
- jquery实现登录成功界面_【jQuery实例】Ajax登录页面
- LabWindows操作SQL SERVER
- HTML---网页编程(1)
- MySQL 数据库的基本类型详解(04)
- SAM-DETR源码讲解
- LeetCode 904. 水果成篮