测试集预测值反归一化Python代码
时间: 2023-06-15 10:06:38 浏览: 65
假设你的测试集已经被归一化了,你需要使用相应的最大值和最小值来反归一化预测值。以下是一个简单的 Python 代码示例:
```python
import numpy as np
# 假设你的测试集有 n 个样本,每个样本 m 个特征
test_data = ... # shape: (n, m)
max_values = ... # shape: (m,), 每个特征的最大值
min_values = ... # shape: (m,), 每个特征的最小值
# 假设你的模型预测结果为 pred,shape: (n, 1)
pred = ...
# 反归一化
pred = pred * (max_values - min_values) + min_values
# 检查结果
print(pred.shape) # (n, 1)
print(np.min(pred, axis=0)) # 每个特征的最小值
print(np.max(pred, axis=0)) # 每个特征的最大值
```
请注意,这里的 `max_values` 和 `min_values` 必须与你在训练集上使用的相同。如果你使用了一种不同的归一化方法,那么你需要使用相应的最大值和最小值对预测进行反归一化。
相关问题
写一个基于python的BP神经网络,将数据划分为训练集和测试集,并且将预测值反归一化输出到excel表格
以下是基于Python的BP神经网络的代码,包括数据划分为训练集和测试集,以及将预测值反归一化输出到Excel表格的功能。
```python
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense
# 读取数据
data = pd.read_excel('data.xlsx')
# 将数据集分为特征和目标变量
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values
# 将目标变量进行归一化
scaler = MinMaxScaler()
y = scaler.fit_transform(y.reshape(-1, 1))
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 构建BP神经网络模型
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=150, batch_size=10)
# 评估模型
scores = model.evaluate(X_test, y_test)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
# 预测测试集结果
y_pred = model.predict(X_test)
# 将预测结果反归一化
y_pred = scaler.inverse_transform(y_pred)
# 将预测结果输出到Excel表格
df = pd.DataFrame({'Actual': scaler.inverse_transform(y_test.reshape(-1)), 'Predicted': y_pred.reshape(-1)})
df.to_excel('predicted_results.xlsx', index=False)
```
在这个例子中,我们使用了一个包含8个输入、12个隐藏层节点和1个输出的BP神经网络模型。我们将训练集和测试集的比例设置为80:20,并使用Adam优化器和二元交叉熵损失函数来编译模型。在训练模型之后,我们使用模型评估方法来评估模型的准确性,并使用模型预测方法来预测测试集的结果。最后,我们将预测结果反归一化,并将它们输出到一个Excel表格中。
数据归一化,plsr交叉验证,并画图python代码
数据归一化是指将数据按照一定的比例缩放,使其落入特定的范围,常用的方法有MinMaxScaler、StandardScaler等。下面是使用MinMaxScaler对数据进行归一化的Python代码示例:
```python
from sklearn.preprocessing import MinMaxScaler
import numpy as np
# 假设原始数据为一个二维数组X,每列为一个特征
X = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 创建MinMaxScaler对象
scaler = MinMaxScaler()
# 对数据进行归一化
X_normalized = scaler.fit_transform(X)
print(X_normalized)
```
PLSR(Partial Least Squares Regression)是一种回归分析方法,它可以在存在多个自变量之间高度相关的情况下进行建模。交叉验证是一种评估模型性能的方法,通过将数据集划分为训练集和测试集,并多次重复该过程,以获得更准确的模型评估结果。下面是使用PLSR进行交叉验证并绘制图形的Python代码示例:
```python
from sklearn.cross_decomposition import PLSRegression
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import r2_score
import matplotlib.pyplot as plt
# 假设原始数据为一个二维数组X,每列为一个自变量,最后一列为因变量
X = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
y = np.array([10, 20, 30])
# 创建PLSR对象
pls = PLSRegression(n_components=2)
# 进行交叉验证并预测
y_pred = cross_val_predict(pls, X, y, cv=5)
# 计算R^2评分
r2 = r2_score(y, y_pred)
# 绘制真实值和预测值的散点图
plt.scatter(y, y_pred)
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=2)
plt.xlabel('True values')
plt.ylabel('Predicted values')
plt.title(f'PLSR Cross-validation (R^2={r2:.2f})')
plt.show()
```
以上代码示例中,假设原始数据X为一个3x3的二维数组,每行代表一个样本,每列代表一个自变量,最后一列代表因变量。在PLSR中,设置了n_components参数为2,表示使用两个主成分进行建模。通过交叉验证得到预测结果y_pred,并计算了R^2评分。最后,使用matplotlib库绘制了真实值和预测值的散点图,并标注了R^2值。