将嵌套列表传递给 sklearn split 函数

Passing nested lists to sklearn split function

我最近开始学习 Python 用于机器学习,但我 运行 遇到了一个问题。我正在使用 Pandas 和 t运行 从 .csv 文件输入数据,将行值转换为数字数组。我需要将这些数组传递给 sklearn 函数。我的代码在这里:

# Imports
import pandas as pd
import numpy as np
import sklearn
import os
import seaborn as seabornInstance
import matplotlib.pyplot as plt
from sklearn import preprocessing


# Dataset input
dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, 'Datasets', 'car.data')
data = pd.read_csv(filename)
label_encoder = preprocessing.LabelEncoder()

# Transforming text
x = [label_encoder.fit_transform(list(data[col])) for col in data.columns if col!='class']
y = [label_encoder.fit_transform(list(data['class']))]

问题来了。我需要访问 x 内的嵌套数组并将它们放入我的 sklearn 函数中,因为在那里拟合 'x' 会引发错误:

ValueError: Found input variables with inconsistent numbers of samples: [6, 1]

x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(x[0], y[0], test_size = 0.08)

有没有办法在不写入 x[0],x[1],.. 的情况下将所有嵌套数组作为 x 而不是整个 x 传递?我不认为它会使用循环,因为我需要一次传递所有内容,还是我错了?

编辑:我导入的数据不是数字(字符串),这就是为什么我使用 label_encoder 将这些值 运行sform 成数字以用于 KNN 算法。

我认为你把它变得不必要地复杂了。您也不应该对 x 变量进行标签编码。顾名思义,它是针对 label,而不是预测变量。对于您的 x 变量,您应该使用这些行:

x = df.loc[:, [i for i in df.columns if i != 'class']]
# or
x = df.drop('class', axis=1) 

对于您的 y 变量:

y = label_encoder.fit_transform(df['class'])