我正在尝试使用train_test_split来评估我的模型。我定义了以下函数来根据函数中的输入在表格(顶部列)上创建输出数组:
def top_sh(num): ###获取上海数据中的前(num)名并进行排列 ####根据输入和输出变量进行相应的安排 #添加要输出的列,值为零或一 #shanghai = shanghai_cp.copy() if 'top' in shanghai.columns: shanghai.drop(columns = shanghai.columns[-1],inplace = True) shanghai['top'] = shanghai['world_rank'].apply(lambda x: 1 if x<= num else 0) out = print('*****************'+ '\n' + '输出数组: Top'+ str(num)+ '\n' + '在分析中忽略: 世界排名') #call = print(shanghai.head(15)) return out
然后我定义了以下用于训练测试分割的过程:
def train_test(df,size, seed): ###将数据分割为测试集和训练集并进行测试 #获取df的输入输出 if df == 'shanghai': column1 = shanghai.columns[1:7] Y = shanghai.values[: , -1].astype(int) y = np.ravel(Y) X = shanghai.values[: , 1:7] elif df == 'times': column1 = times.columns[1:10] Y = times.values[: , -1].astype(int) y = np.ravel(Y) X = times.values[: , 1:10] else: return print('可用的数据集: "shanghai" , "times"') #分割为训练集和测试集 X_Train, X_Test, Y_Train, Y_Test = train_test_split(X,Y, test_size=size, random_state=seed) #获取回归模型 model= LogisticRegression(solver='liblinear') model.fit(X_Train,X_Test) #查看分割后的准确性 result=model.score(X_Test,Y_Test) print(f'准确率 {result*100:5.3f}') return
我运行了以下代码:
top_sh(50)shanghai.head()X.shapeYY.shapetrain_test('shanghai',0.3,7)```X.shape = (768, 8)Y.shape = (768, )我在train_test函数中遇到了以下错误,具体在model.fit行上:> ValueError: 输入形状错误 (150, 6)
回答:
问题很可能是由于你传递给fit
的内容引起的。它期望X值作为预测变量,Y值作为预测值,因此这行代码是错误的:
model.fit(X_Train,X_Test)
你应该尝试传递Y_train
:
model.fit(X_train,Y_train)