机器学习之用Python实现最小二乘法预测房价,进行额度预测

网友投稿 287 2022-08-24


机器学习之用Python实现最小二乘法预测房价,进行额度预测

使用最小二乘法进行房价预测:

给定训练样本集合如下:

求解:当房屋面积为55平方时,租赁价格是多少?给出代码与运行结果图。

首先明白什么是最小二乘法,利用最小二乘法公式

p = (X^TX)^-1 X^T Y

import numpy as npfrom numpy import matimport matplotlib.pyplot as pltif __name__ == "__main__": # 1 获得x,y数据# ########## X = np.array([10, 15, 20, 30, 50, 60, 60, 70]) y = np.array([0.8, 1, 1.8, 2, 3.2, 3, 3.3, 3.5]) plt.scatter(X, y) plt.show() # 2 矩阵形式转换X, Y Y_mat = mat(y).T # print(Y_mat) X_temp = np.ones((8, 2)) #print(X_temp) X_temp[:, 0] = X # print(X_temp) X_mat = mat(X_temp) #print(X_mat) # 3 利用解析法 p = (X^TX)^-1 X^T Y pamaters = (((X_mat.T)*X_mat).I) * X_mat.T*Y_mat ¥print(pamaters) # 4 显示 predict_Y = X_mat * pamaters # print(predict_Y) plt.figure() plt.scatter(X, y, c="blue") plt.plot(X, predict_Y, c="red") plt.title("房价预测图") # 设置图表标题 plt.xlabel("房屋面积(m^2)") # 设置x坐标轴标签 plt.ylabel("租赁价格(1000$)") # 设置y坐标轴标签 plt.rcParams['font.sans-serif'] = ['Kaiti'] # 用来正常显示中文(黑体)常用字体包括: Kaiti-楷体; FangSong-仿宋; Microsoft YaHei-微软雅黑 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 plt.show() s = input("请输入房屋面积:") #print(s) s_temp = np.ones((1, 2)) s_temp[:, 0] = s #print(s_temp) s_mat = mat(s_temp) z = s_mat * pamaters print("租赁价格为:", z)

散点图和折线图

输入房屋面积即可得出租赁价格!

2. 使用最小二乘法进行贷款额度预测:

给定训练样本集合如下:

求解:当工资18000、年龄30时,额度是多少?给出代码与运行结果图

难点在于有两个参数 画三维图需要引入mpl_toolkits.mplot3d

最小二乘法公式不变

p = (X^TX)^-1 X^T Y

在画图时要分别为x,y,z轴赋值,并写上坐标标签,由于数据的小数位太多,超出位数范围会报错,所以要将小数变为整数!

import numpy as npfrom numpy import matimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D # 画三维图if __name__ == "__main__": # 1 获得x,y数据# ########## X = np.array([[4000, 25], [8000, 30], [5000, 28], [7500, 33], [12000, 40]]) Y = np.array([20000, 70000, 35000, 50000, 85000]) # 2 矩阵形式转换X, Y Y_mat = mat(Y).T X_temp = np.ones((5, 3)) X_temp[:, 0] = X[:, 0] X_temp[:, 1] = X[:, 1] #print(X_temp) X_mat = mat(X_temp) # print(X_mat) # 3 利用解析法 p = (X^TX)^-1 X^T Y pamaters = (((X_mat.T) * X_mat).I) * X_mat.T * Y_mat #print(pamaters) # 4 显示 fig1 = plt.figure() ax1 = Axes3D(fig1) x = X[:, 0] y = X[:, 1] z = Y Z = X_mat * pamaters #print(Z) n = list(map(int, Z[:, 0])) # Z中的数的位数超出范围 #print(n) ax1.scatter3D(x, y, z, c='blue') ax1.plot3D(x, y, n, c='red') plt.title("贷款额度预测图") # 设置图表标题 plt.xlabel("工资") # 设置x坐标轴标签 plt.ylabel("年龄") # 设置y坐标轴标签 ax1.set_zlabel("额度")# 设置z坐标标签 plt.rcParams['font.sans-serif'] = ['Kaiti'] # 用来正常显示中文(黑体)常用字体包括: Kaiti-楷体; FangSong-仿宋; Microsoft YaHei-微软雅黑 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 plt.show() a = eval(input("请输入工资:")) b = eval(input("请输入年龄: ")) s = np.array([[a, b]]) # print(s) s_temp = np.ones((1, 3)) s_temp[:, 0] = s[:, 0] s_temp[:, 1] = s[:, 1] #print(s_temp) s_mat = mat(s_temp) m = s_mat * pamaters print("贷款额度为:", m)

三维散点和折线图

输入工资和年龄即可输出贷款额度!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:7-16 每日一题 剑指 Offer II 041. 滑动窗口的平均值(716祖师爷是谁)
下一篇:Mybatis中的PageHelper的执行流程分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~