【人工智能】机器学习之用Python实现最小二乘法进行房价预测以及进行贷款额度预测

南蓬幽 发表于 2022/04/22 10:25:27 2022/04/22
【摘要】 1.使用最小二乘法进行房价预测:给定训练样本集合如下:求解:当房屋面积为55平方时,租赁价格是多少?给出代码与运行结果图。首先明白什么是最小二乘法,利用最小二乘法公式p = (X^TX)^-1 X^T Yimport numpy as npfrom numpy import matimport matplotlib.pyplot as pltif __name__ == "__main__...

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

给定训练样本集合如下:
在这里插入图片描述

求解:当房屋面积为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)

三维散点和折线图

在这里插入图片描述
输入工资和年龄即可输出贷款额度!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。