import sklearn.datasets as data
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib as mpl
class LinearRegression:
def __init__(self):
pass
def fit(self, X, y):
X = np.asmatrix(X.copy())
y = np.asmatrix(y).reshape(-1, 1)
self.w_ = (X.T * X).I * X.T * y
def predict(self, X):
X = np.asmatrix(X.copy())
result = X * self.w_
return np.array(result).ravel()
if __name__ == '__main__':
boston = data.load_boston()
col_names = np.append(boston.feature_names, 'MEDV')
data = pd.DataFrame(data=np.c_[boston.data, boston.target], columns=col_names)
t = data.sample(len(data), random_state=0)
# 增加一列 但是在最后添加 故不使用
# t['ddd'] = 1
# 往前面增加一列的方法
print(t)
newColumns = t.columns.insert(0, 'intercept')
# 注意必须更新一下,否则会出现添加到最后一列的效果
t = t.reindex(columns=newColumns)
t['intercept'] = 1
# print(t)
train_x = t.iloc[:400, :-1]
train_y = t.iloc[:400, -1].values
test_x = t.iloc[400:, :-1]
test_y = t.iloc[400:, -1].values
print(test_y)
# print(train_x)
Lr = LinearRegression()
Lr.fit(train_x, train_y)
result = Lr.predict(test_x)
# print(result)
# print(np.mean((result - test_y) ** 2))
# print(Lr.w_)
print(result)
print(test_y)
mpl.rcParams['font.family'] = 'SimHei'
mpl.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10, 10))
plt.plot(result, "ro-", label='预测值')
plt.plot(test_y, "go-", label='真实值')
plt.title('线性回归预测')
plt.xlabel('样本个数')
plt.ylabel('房价')
plt.legend()
plt.show()
机器学习_线性回归最小二乘法求解
最新推荐文章于 2022-10-17 13:05:55 发布