python机器学习 实验一 使用最小二乘法进行贷款额度预测

python机器学习 实验一 使用最小二乘法进行贷款额度预测

在这里插入图片描述
求解:当工资18000、年龄30时,额度是多少?给出代码与运行结果图

代码:

from mpl_toolkits.mplot3d import Axes3D
from pylab import mpl
import matplotlib.pyplot as plt

#多元函数是空间问题不再是平面问题,因此要用到三维画图

#导入数据源
x1 = [4000, 8000, 5000, 7500, 12000]
x2 = [25, 30, 28, 33, 40]
y = [20000, 70000, 35000, 50000, 85000]

#计算二元表达式的参数,根据最小二乘法表达式计算,推出各个参数
def multivariatel_fitting(x1, x2, y):
    size = len(x1)
    sum_x1 = 0
    sum_x2 = 0
    sum_square_x1 = 0
    sum_square_x2 = 0
    sum_x1x2 = 0
    sum_y = 0
    sum_x1y = 0
    sum_x2y = 0
    i = 0
    while i < size:
        sum_x1 += x1[i]
        sum_x2 += x2[i]
        sum_y += y[i]
        sum_x1y += x1[i] * y[i]
        sum_x2y += x2[i] * y[i]
        sum_x1x2 += x1[i] * x2[i]
        sum_square_x1 += x1[i] * x1[i]
        sum_square_x2 += x2[i] * x2[i]
        i += 1
    return [[size, sum_x1, sum_x2, sum_y]
        , [sum_x1, sum_square_x1, sum_x1x2, sum_x1y]
        , [sum_x2, sum_x1x2, sum_square_x2, sum_x2y]]


#将各个参数带入表达式,计算出来表达式的参数
def calculate_parameter(data):
    # i用来控制列元素,line是一行元素,j用来控制循环次数,datas用来存储局部变量。保存修改后的值
    i = 0
    j = 0
    line_size = len(data)

    # 将行列式变换为上三角行列式
    while j < line_size - 1:
        line = data[j]
        temp = line[j]
        templete = []
        for x in line:
            x = x / temp
            templete.append(x)
        data[j] = templete
        # flag标志应该进行消元的行数
        flag = j + 1
        while flag < line_size:
            templete1 = []
            temp1 = data[flag][j]
            i = 0
            for x1 in data[flag]:
                if x1 != 0:
                    x1 = x1 - (temp1 * templete[i])
                    templete1.append(x1)
                else:
                    templete1.append(0)
                i += 1
            data[flag] = templete1
            flag += 1
        j += 1

    # 求相应的参数值

    parameters = []
    i = line_size - 1
    # j标识减去元素个数
    # flag_rol标识除那一列
    flag_j = 0
    rol_size = len(data[0])
    flag_rol = rol_size - 2
    # 获得解的个数
    while i >= 0:
        operate_line = data[i]
        if i == line_size - 1:
            parameter = operate_line[rol_size - 1] / operate_line[flag_rol]
            parameters.append(parameter)
        else:
            flag_j = (rol_size - flag_rol - 2)
            temp2 = operate_line[rol_size - 1]
            # result_flag为访问已求出解的标志
            result_flag = 0
            while flag_j > 0:
                temp2 -= operate_line[flag_rol + flag_j] * parameters[result_flag]
                result_flag += 1
                flag_j -= 1
            parameter = temp2 / operate_line[flag_rol]
            parameters.append(parameter)
        flag_rol -= 1
        i -= 1
    return parameters


def calculate(data_x1, data_x2, parameters):
    datay = []
    i = 0
    while i < len(data_x1):
        result = parameters[2] + parameters[1] * data_x1[i] + parameters[0] * data_x2[i]
        i += 1
        datay.append(result)
    return datay


#画图
def draw(data_x, old_y, new_y):
    # 创建绘图函数对象
    fig = plt.figure()
    # 创建Axes3D对象,让其包含图像3D坐标
    ax = Axes3D(fig)
    ax.scatter(data_x[0], data_x[1], old_y, color='red')
    ax.plot(data_x[0], data_x[1], new_y, "bp--")
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    plt.title("最小二乘法预测贷款额度")
    plt.show()


data = multivariatel_fitting(x1, x2, y)
data2 = calculate_parameter(data)
# print(data2)
print(data2[1] * eval(input()) + data2[0] * eval(input()) + data2[2])
newY = calculate(x1, x2, data2)
draw([x1, x2], y, newY)

结果图:
在这里插入图片描述
预测结果:
在这里插入图片描述
点个👍吧
在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

henu-于笨笨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值