chelseaNB1 2023-06-27 20:10 采纳率: 75.7%
浏览 38
已结题

python神经网络回归模型如何寻找最佳参数

我的数据经筛选后是96行7列,神经网络建模的时候怎么寻找最佳参数?
现在建模的效果很差很差,怎么进行调整
数据概况,第一列为y,601个特征筛选后还有7个特征用于神经网络建模

img

#MSC处理后进行特征波段筛选
###1.数据读入
#导入pandas读取数据
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import numpy as np
from sklearn import metrics
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
#读取数据
data = pd.read_excel("./data/XZQ集装箱3-1MSC.xlsx")
#print(data[:5]) #前五行
###2.数据分离
#m * n
#print("数据矩阵 data.shape:",data.shape)
#50个样本,600个波段第一列是桃子糖度值,需要分离开
X = data.values[:,1:] #切片,得x,行全要,列从第二列开始
y = data.values[:,0] #切片,得y,行全要,列拿第一列
#print(f"X.shape:{X.shape}, y.shape:{y.shape}")
###3.导入SPA
#导入SPA包
import SPA
#导入spa对象
spa = SPA.SPA()
#print(X[1,:5]) #随便拿取数据看看效果,X得第二行前五列数据
#print(X_[1,:5])
#建模集测试集分割
#若存在运行后出现波段选择为最小值可适当调整建模集与测试集比例,test_size值0.3 - 0.5
Xcal, Xval, ycal, yval = train_test_split(X, y, test_size=0.3, random_state=0)
#print(Xcal.shape,Xval.shape)
###4.建模筛选
#m_max默认为50(Xcal样本大于52),如果Xcal(m*n) m < 50 m_max=m-2
var_sel, var_sel_phase2 = spa.spa(
        Xcal, ycal, m_min=2, m_max=28,Xval=Xval, yval=yval, autoscaling=1)
###5.导出波段
#导出筛选光谱波段
#spa返回的是列号,并不是光谱数据
#获取波段列表
absorbances = data.columns.values[1:]
#print("波段(前5个)",absorbances[:5])
#spa筛选出的波段
print("spa 筛选出的波段:",absorbances[var_sel])
#导出筛选波段光谱数据
X_select = X[:,var_sel]
print("X_select.shape:",X_select.shape)
#print(X_select)
#建立神经网络预测模型
#划分训练测试集
train_x,test_x,train_y,test_y = train_test_split(X_select,y,test_size=0.3, random_state=1)
#没有标准化
mlpr1 = MLPRegressor(solver='sgd',learning_rate="adaptive",max_iter=1000,alpha=1e-5, hidden_layer_sizes=(5,2), random_state=1)
mlpr1.fit(train_x,train_y)
#计算在训练集和测试集上的预测均方根误差
mlpr1_lab = mlpr1.predict(train_x)
mlpr1_pre = mlpr1.predict(test_x)
print("训练集上的均方根误差:",metrics.mean_squared_error(train_y,mlpr1_lab))
print("测试集上的均方根误差:",metrics.mean_squared_error(test_y,mlpr1_pre))
print(metrics.r2_score(test_y,mlpr1_pre))
#有标准化
std = StandardScaler()
train_x_s = std.fit_transform(train_x)
test_x_s = std.transform(test_x)
mlpr2 = MLPRegressor(solver='sgd',learning_rate="adaptive",max_iter=1000,alpha=1e-5, hidden_layer_sizes=(5,2), random_state=1)
mlpr2.fit(train_x_s,train_y)
#计算均方根误差
mlpr2_lab = mlpr2.predict(train_x_s)
mlpr2_pre = mlpr2.predict(test_x_s)
print("训练集上的均方根误差:",metrics.mean_squared_error(train_y,mlpr2_lab))
print("测试集上的均方根误差:",metrics.mean_squared_error(test_y,mlpr2_pre))
print(metrics.r2_score(test_y,mlpr2_pre))

目前的效果

img

  • 写回答

5条回答 默认 最新

  • chelseaNB1 2023-06-27 20:44
    关注

    当我使用标准化后的数据进行网格搜索时,一直提示“ConvergenceWarning: Stochastic Optimizer: Maximum iterations (800) reached a...”模型未收敛。第一次使用神经网络,不知道怎么初设参数

    ###网格搜索
    # pipe_MLPR = Pipeline([
    #                      ("MLPR",MLPRegressor())]) #KNN分类操作
    # hid1 = np.arange(2,52,2)
    # hid2 = np.arange(2,52,2)
    # xx,yy = np.meshgrid(hid1,hid2)
    # hls = [(x,y) for x,y in zip(xx.flatten(),yy.flatten())]
    # para_grid = [{
    #               "MLPR__solver":['sgd','adam','lbfgs'],
    #               "MLPR__activation":['identity', 'logistic', 'tanh', 'relu'],
    #               "MLPR__learning_rate":['constant','invscaling', 'adaptive'],
    #               "MLPR__max_iter":[4000,5000,6000],
    #               "MLPR__hidden_layer_sizes":hls,
    #               "MLPR__batch_size":[32,64,128]
    #               }]
    # gs_MLPR_ir = GridSearchCV(estimator=pipe_MLPR,param_grid=para_grid,cv=5,n_jobs=4) #模型
    # gs_MLPR_ir.fit(train_x_s,train_y)
    # print(gs_MLPR_ir.best_params_)
    # HEIHEIHEI = gs_MLPR_ir.best_estimator_  #获取最好的模型并保存
    # prey = HEIHEIHEI.predict(test_x_s)
    # print("R2:",metrics.r2_score(test_y,prey))
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月28日
  • 创建了问题 6月27日

悬赏问题

  • ¥15 (关键词-运算放大器)
  • ¥15 关于#游戏策划#的问题:当浏览器输入兑换码,疯狂点击领取按钮,邮箱马上到账几十个兑换码礼包
  • ¥15 虚拟机打不开,怎么解决
  • ¥15 为什么游戏兑换码能被重复领取
  • ¥30 (急!)java实现二叉链表构建二叉树,实现相关功能
  • ¥15 C#tekloa节点插件小项
  • ¥20 脑电信号的局部场电位分析
  • ¥30 Diodes 霍尔开关AH337已经obselete,他的升级替代料【不改变现有电路图】
  • ¥15 python爬虫IndexError: list index out of range
  • ¥15 (标签-考研|关键词-set)