问题如下:
代码实现:
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()
#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()
#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()
(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]]
'''
(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