Я пытался использовать xgboost
для построения регрессионной модели.
Сегодня каждый из моих входов представляет собой двумерный массив, и каждому входу соответствует одно значение.
Однако у меня возникла проблема с преобразованием данных в Dmatrix.
X_data_train - это трехмерный массив (# shape(num_files, length,width)
), а label_data_train - это двумерный массив (# shape(num_files,1)
).
Появится следующее сообщение об ошибке:
ValueError: Input numpy.Ndarray должен быть двухмерным
В настоящее время я могу временно использовать файл и преобразовать его в двумерный массив.
Однако при продолжении программы появится следующее сообщение об ошибке:
Проверка не пройдена: preds.Size () = info.Ярлыки Labels_.Size () (100 против 1) предоставлены неправильно
Но у меня есть только одна метка.Как я могу исправить эти сообщения об ошибках ??
import xgboost as xgb
from xgboost import plot_importance
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
import numpy as npnter code here
mms = MinMaxScaler()
#dataset
files_num_train = 5
files_num_test = 2
#for train
x_data_train = []
label_data_train = []
read_y_data_train = pd.read_csv('path/label.csv')
y_data_train = read_y_data_train['Label'].to_numpy()
#for test
x_data_test = []
label_data_test = []
read_y_data_test = pd.read_csv('path/label.csv')
y_data_test = read_y_data_test['Label'].to_numpy()
#training set
for i in range(files_num_train):
read_x_data_train = pd.read_csv('path/train%s.csv'%i,index_col = 0).to_numpy()
x_data_stc_train = mms.fit_transform(read_x_data_train)
x_data_train.append(x_data_stc_train)
label_data_train.append(y_data_train[i])
#testing set
for j in range(files_num_test):
read_x_data_test = pd.read_csv('path/test%s.csv'%j,index_col = 0).to_numpy()
x_data_stc_test = mms.transform(read_x_data_test)
x_data_test.append(x_data_stc_test)
label_data_test.append(y_data_test[j])
x_data_train = np.array(x_data_train)
label_data_train = np.array(label_data_train)
label_data_train = label_data_train.reshape((files_num_train,1,1))
print(x_data_train)#shape = (files_num_train,100,100)
print(label_data_train)#shape = (files_num_train,1,1)
params = {
'booster': 'gbtree',
'objective': 'reg:gamma',
'gamma': 0.1,
'max_depth': 5,
'lambda': 3,
'subsample': 0.7,
'colsample_bytree': 0.7,
'min_child_weight': 3,
'silent': 1,
'eta': 0.1,
'seed': 1000,
'nthread': 4,
}
#dtrain = xgb.DMatrix(x_data_train, label_data_train)
#will appear: ValueError: Input numpy.ndarray must be 2 dimensional
#temporarly use one file to train
dtrain = xgb.DMatrix(x_data_train[0], label_data_train[0])
num_rounds = 300
plst = params.items()
model = xgb.train(plst, dtrain, num_rounds)
#appear error message here:
#Check failed: preds.Size() == info.labels_.Size() (4000 vs. 1) labels are not correctly provided
x_data_test = np.array(x_data_test)
dtest = xgb.DMatrix(x_data_test)
ans = model.predict(dtest)
plot_importance(model)
plt.show()