机器学习实验:一元线性回归-最小二乘法

机器学习实验:一元线性回归-最小二乘法

问题如下:

  1. 使用最小二乘法进行房价预测:
    给定训练样本集合如下:
    机器学习实验:一元线性回归-最小二乘法_第1张图片

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

  2. 使用最小二乘法进行贷款额度预测:
    给定训练样本集合如下:
    机器学习实验:一元线性回归-最小二乘法_第2张图片
    求解:当工资18000、年龄30时,额度是多少?给出代码与运行结果图

代码实现:

1.使用最小二乘法进行房价预测:
(1)引入依赖包

import numpy as np
from numpy import mat
import matplotlib.pyplot as plt

(2)获取x,y数据

iter = 8
    
# 1 获取x,y数据 #
X = np.array([10,15,20,30,50,60,60,70])
print(X)       #维度为(1,50),大小为[0,20)
Y = np.array([0.8,1,1.8,2,3.2,3,3.1,3.5])
print(Y)

plt.scatter(X,Y)    #画出散点图:https://blog.csdn.net/m0_37393514/article/details/81298503
plt.show()

机器学习实验:一元线性回归-最小二乘法_第3张图片
(3)训练模型

#2 矩阵形式转化X,Y
Y_mat = mat(Y).T        #将y转化为矩阵并转置
#print(Y_mat)           #维度为(8, 1)

X_temp = np.ones((iter,2))  #生成一个维度为(8,2)的全为1的矩阵
#print(X_temp)          #维度为(8, 2)
X_temp[:,0] = X         #令X_temp中第一列的值等于X
#print(X_temp)          #维度为(8, 2)
X_mat = mat(X_temp)     #将X_temp转化为矩阵,维度为(8, 2)

#3 利用解析法 p = (X^TX)^-1 X^T Y
parameters = (( (X_mat.T) * X_mat).I) * X_mat.T * Y_mat    #矩阵.I是求逆矩阵
print(parameters)       #维度为(2, 1),其中parameters[0]为W,parameters[1]为b
#正常条件下维度为(n,1),其中parameters[0:n-1]为W,parameters[n-1]为b
#最后结果为0.04330335,0.5949305

#4  显示     
predict_Y = X_mat* parameters 

plt.figure()
plt.scatter(X, Y, c="blue")   
plt.plot(X, predict_Y, c="red")   
plt.show()

机器学习实验:一元线性回归-最小二乘法_第4张图片
(4)进行预测

#5 预测
y_predict = 55 * parameters[0,0] + parameters[1,0]
print("当x=55时,y的值为"+str(y_predict))
#当x=55时,y的值为2.9766148814390854


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

(1)导入包

import numpy as np
from numpy import mat
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

(2)加载数据

np.random.seed(1)
iter = 5  
# 1 获取x,y数据 #
X = np.array([[4000,8000,5000,7500,12000],[25,30,28,33,40]])
print(X)       #维度为(1,50),大小为[0,20)
Y = np.array([20000,70000,35000,50000,85000])
print(Y)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')  #三维图绘制方法:https://www.cnblogs.com/xingshansi/p/6777945.html
ax.scatter(X[0], X[1], Y,c="red")
plt.show()

机器学习实验:一元线性回归-最小二乘法_第5张图片

(3)训练模型

#2 矩阵形式转化X,Y
Y_mat = mat(Y).T        #将y转化为矩阵并转置
#print(Y_mat)           #维度为(5, 1)

X_temp = np.ones((iter,3))  #生成一个维度为(5,3)的全为1的矩阵
#print(X_temp)          #维度为(5, 3)
X_temp[:,0] = X[0,:]         #令X_temp中第一列的值等于X
X_temp[:,1] = X[1,:]         #令X_temp中第二列的值等于X
#print(X_temp)          #维度为(5, 3)
X_mat = mat(X_temp)     #将X_temp转化为矩阵,维度为(5, 3)

#3 利用解析法 p = (X^TX)^-1 X^T Y
parameters = (( (X_mat.T) * X_mat).I) * X_mat.T * Y_mat    #矩阵.I是求逆矩阵
print("参数值为:")
print(parameters)       #维度为(3, 1),其中parameters[0]为W,parameters[1]为b
#正常条件下维度为(n,1),其中parameters[0:n-1]为W,parameters[n-1]为b
#最后结果为0.04330335,0.5949305

#4  显示     
predict_Y = X_mat* parameters 
print("预测值为:")
print(predict_Y)

# 绘图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[0], X[1], Y,c="red")
ax.scatter(X[0], X[1], predict_Y,c="blue")
plt.show()
'''
参数值为:
[[ 1.46981849e+01]
 [-3.75967356e+03]
 [ 6.20050654e+04]]
预测值为:
[[26805.96594906]
 [66800.33769523]
 [30225.13015337]
 [48172.22456733]
 [87996.34163501]]
'''

机器学习实验:一元线性回归-最小二乘法_第6张图片

(4)进行预测

#5 预测
y_predict = 18000 * parameters[0,0] + 30 * parameters[1,0] + parameters[2,0]
print("当工资18000、年龄30时,额度为"+str(y_predict))
#当工资18000、年龄30时,额度为213782.18657660834

你可能感兴趣的:(机器学习,python,机器学习,线性回归,最小二乘法)