1、获取数据并划分数据集 2、数据标准化/归一化处理 3、LinearRegression_numpy类实例化 #训练模型,调用类中的train_BGD方法 # 4、使用测试集进行测试,模型评价 # 将模型训练得到的系数w与测试数据test_data计算得到预测值。 # 计算测试集的MSE 5、画出损失函数的变化趋势,画出预测值与真实值曲线
时间: 2023-06-20 17:08:25 浏览: 107
这是一个线性回归模型的基本流程,下面我会逐一解释每个步骤的含义和操作。
1. 获取数据并划分数据集:
首先需要获取数据,可以从文件或数据库中读取。接着需要将数据集划分为训练集和测试集,一般情况下训练集占总数据集的70%~80%,测试集占20%~30%。
2. 数据标准化/归一化处理:
对数据进行标准化/归一化处理的目的是将数据转换为均值为0,方差为1或者数据范围在0到1之间的形式,这样可以提高模型的收敛速度和精度。
3. LinearRegression_numpy类实例化:
使用LinearRegression_numpy类实例化,然后调用类中的train_BGD方法进行模型训练。train_BGD方法采用批量梯度下降法进行参数更新,直到损失函数的值收敛或达到最大迭代次数为止。
4. 使用测试集进行测试,模型评价:
将模型训练得到的系数w与测试数据test_data计算得到预测值,然后计算测试集的MSE(均方误差)作为模型评价指标,以判断模型的拟合效果。
5. 画出损失函数的变化趋势,画出预测值与真实值曲线:
通过损失函数的变化趋势曲线可以判断模型的收敛情况,若损失函数逐渐下降并趋于平缓,则证明模型已经收敛。预测值与真实值曲线可以用来直观地观察模型的预测效果,若两条曲线重合,则证明模型预测效果较好。
相关问题
按以下方法编写梯度下降法预测波士顿房价1、获取数据并划分数据集 2、数据标准化/归一化处理 3、LinearRegression_numpy类实例化 #训练模型,调用类中的train_BGD方法 # 4、使用测试集进行测试,模型评价 # 将模型训练得到的系数w与测试数据test_data计算得到预测值。 # 计算测试集的MSE 5、画出损失函数的变化趋势,画出预测值与真实值曲线
以下是Python代码实现:
```
# 导入需要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 1、获取数据并划分数据集
data = pd.read_csv('boston_housing.csv')
train_data = data.sample(frac=0.8, random_state=0)
test_data = data.drop(train_data.index)
train_X = train_data.iloc[:, :-1]
train_y = train_data.iloc[:, -1]
test_X = test_data.iloc[:, :-1]
test_y = test_data.iloc[:, -1]
# 2、数据标准化/归一化处理
mean = train_X.mean()
std = train_X.std()
train_X = (train_X - mean) / std
test_X = (test_X - mean) / std
# 3、LinearRegression_numpy类实例化
class LinearRegression_numpy:
def __init__(self, lr=0.01, epochs=1000):
self.lr = lr
self.epochs = epochs
def train_BGD(self, X, y):
m, n = X.shape
self.w = np.zeros(n)
self.b = 0
self.losses = []
for epoch in range(self.epochs):
y_pred = np.dot(X, self.w) + self.b
loss = np.sum((y_pred - y) ** 2) / (2 * m)
self.losses.append(loss)
dw = np.dot(X.T, (y_pred - y)) / m
db = np.sum(y_pred - y) / m
self.w -= self.lr * dw
self.b -= self.lr * db
def predict(self, X):
return np.dot(X, self.w) + self.b
# 训练模型
model = LinearRegression_numpy(lr=0.1, epochs=1000)
model.train_BGD(train_X.values, train_y.values)
# 4、使用测试集进行测试,模型评价
pred_y = model.predict(test_X.values)
mse = np.mean((pred_y - test_y.values) ** 2)
print('MSE: ', mse)
# 5、画出损失函数的变化趋势,画出预测值与真实值曲线
plt.plot(model.losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()
plt.scatter(test_y.values, pred_y)
plt.xlabel('True Values')
plt.ylabel('Predictions')
plt.axis('equal')
plt.axis('square')
plt.xlim([0,plt.xlim()[1]])
plt.ylim([0,plt.ylim()[1]])
_ = plt.plot([0, 50], [0, 50])
plt.show()
```
这段代码将会将数据读入,划分为训练集和测试集,并进行标准化处理。
接着使用 LinearRegression_numpy 类实例化并使用批量梯度下降法训练模型,并计算测试集的均方误差。
最后,画出损失函数的变化趋势和预测值与真实值的曲线。
补全程序,完成以下功能:创建表示5×5的随机矩阵的DataFrame 对象,行素引和列索引都为1~5,元素取值在1~50,对数据进行归一化和正则化。import pandas as pd import numpy as np from sklearn.preprocessing import ____________ # 导入库用于数据正则化 from sklearn.preprocessing import ____________ # 导入库用于数据归一化 # 创建表示5×5的随机矩阵的DataFrame对象frame ar = np._______.randint(1, 51, 25).reshape(5, 5) frame = pd.DataFrame(ar) print(frame) # 转换器实例化 minmax_scaler = MinMaxScaler() # 数据归一化 normalization_result = ______________________ print("数据归一化:\n", normalization_result) # 转换器实例化 standard_scaler = ______________________ # 数据正则化 standard_result = ______________________ print("数据正则化:\n", standard_result)
补全程序如下:
```
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler # 导入库用于数据正则化
from sklearn.preprocessing import StandardScaler # 导入库用于数据归一化
# 创建表示5×5的随机矩阵的DataFrame对象
ar = np.random.randint(1, 51, 25).reshape(5, 5)
frame = pd.DataFrame(ar, index=[1,2,3,4,5], columns=[1,2,3,4,5])
print(frame)
# 转换器实例化
minmax_scaler = MinMaxScaler()
standard_scaler = StandardScaler()
# 数据归一化
normalization_result = minmax_scaler.fit_transform(frame)
print("数据归一化:\n", normalization_result)
# 数据正则化
standard_result = standard_scaler.fit_transform(frame)
print("数据正则化:\n", standard_result)
```
程序中,我们先利用Numpy生成一个5×5的矩阵,然后将其转换为一个DataFrame对象。接着,我们分别实例化了一个MinMaxScaler和一个StandardScaler转换器。最后,我们用fit_transform()函数对DataFrame数据进行归一化和正则化,并打印出结果。
阅读全文