import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r'c:\windows\fonts\msyh.ttc', size=10)

def runplt(size=None):
    plt.figure(figsize=size)
    plt.title('数据', fontproperties=font)
    plt.xlabel('房屋面积', fontproperties=font)
    plt.ylabel('销售价格', fontproperties=font)
    plt.axis([0, 300, 0, 300])
    plt.grid(True)
    return plt

plt = runplt()
X = [[115], [110], [80], [135], [105]]
y = [[24.8], [21.6], [18.4], [29.2], [22]]
plt.plot(X, y, 'k.')
plt.show()

from sklearn import linear_model
model = linear_model.LinearRegression()
model.fit(X, y)
print(model.intercept_)  #截距
print(model.coef_)  #线性模型的系数
a = model.predict([[150]])
# a[0][0]
print('预测当房屋面积为150m2时的销售价格:{:.2f}'.format(model.predict([[150]])[0][0]))

plt = runplt()
plt.plot(X, y, 'k.')
X2 = [[0], [10], [14], [25]]
model = linear_model.LinearRegression()
model.fit(X,y)
y2 = model.predict(X2)
plt.plot(X2, y2, 'g-')
plt.show()

##带成本函数的多条拟合曲线,如何取最佳曲线?
plt = runplt(size=(10,10))
plt.plot(X, y, 'k.')
y3 = [14.25, 14.25, 14.25, 14.25]
y4 = y2*0.5 + 5
model.fit(X[1:-1], y[1:-1])
y5 = model.predict(X2)
plt.plot(X, y, 'k.', label='X, y')
plt.plot(X2, y2, 'g-.', label='X2 y2')
plt.plot(X2, y3, 'r-.',label='X2, y3')
plt.plot(X2, y4, 'y-.',label='X2, y4')
plt.plot(X2, y5, 'o-', label='X2, y5')
plt.legend()
plt.show()

plt = runplt()
plt.plot(X, y, 'k.')
X2 = [[0], [10], [14], [25]]
model = linear_model.LinearRegression()
model.fit(X, y)
y2 = model.predict(X2)
plt.plot(X, y, 'k.')
plt.plot(X2, y2, 'g-')

# 残差预测值
yr = model.predict(X)
#  enumerate 函数可以把一个 list 变成索引-元素对
for idx, x in enumerate(X):
    plt.plot([x, x], [y[idx], yr[idx]], 'r-')
plt.show()

import numpy as np
print('残差平方和:{:.2f}'.format(np.mean((model.predict(X) - y) ** 2)))

残差平方和: 6.11


原文地址: https://www.cveoy.top/t/topic/pk1o 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录