行是知之始,知是行之成。这篇文章主要讲述机器学习之用Python实现最小二乘法预测房价,进行额度预测相关的知识,希望能为你提供帮助。
使用最小二乘法进行房价预测:
给定训练样本集合如下:
文章图片
求解:当房屋面积为55平方时,租赁价格是多少?给出代码与运行结果图。
首先明白什么是最小二乘法,利用最小二乘法公式
p = (X^TX)^-1 X^T Y
import numpy as np
from numpy import mat
import matplotlib.pyplot as plt
if __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 np
from numpy import mat
import matplotlib.pyplot as plt
from 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)
三维散点和折线图
【机器学习之用Python实现最小二乘法预测房价,进行额度预测】
文章图片
输入工资和年龄即可输出贷款额度!
推荐阅读
- #导入Word文档图片# Linux下内核微线程tasklet
- x64驱动 遍历驱动模块
- Python 迭代器介绍及其作用
- WinDbg 配置网络调试
- Linux实战之SSL自签名证书
- 人工智能机器学习之使用Python生成ID3决策树
- win10 搭建 Hyper-V 虚拟机环境
- MySQL--SQL优化案例--隐式字符编码转换
- C++ string 替换子串