Как упомянуто в комментариях под вашим вопросом, ваши функции и ваш ярлык - это, безусловно, строки Однако sklearn требует, чтобы они были нумерацией c (sklearn обычно используется с массивами numpy). В этом случае вам необходимо преобразовать элементы вашего информационного кадра из строк в числовые значения c.
Глядя на ваш код, я предполагаю, что каждый элемент вашего столбца объектов представляет собой список строк, а каждый элемент столбца вашей метки представляет собой одну строку. Вот пример того, как такой кадр данных может быть преобразован, чтобы содержать числовые значения c.
import numpy as np
import pandas as pd
df = pd.DataFrame({'features': [['5', '4.2'], ['3', '7.9'], ['2', '9']],
'label': ['1', '0', '0']})
print(type(df.features[0][0]))
print(type(df.label[0]))
def convert_to_float(collection):
floats = [float(el) for el in collection]
return np.array(floats)
df_numeric = pd.concat([df["features"].apply(convert_to_float),
pd.to_numeric(df["label"])],
axis=1)
print(type(df_numeric.features[0][0]))
print(type(df_numeric.label[0]))
Однако , описанный формат кадра данных не соответствует формату, ожидаемому моделями sklearn pandas датафреймы иметь. Насколько я знаю, модели sklearn ожидают, что каждая функция будет храниться в отдельном столбце, как это имеет место здесь:
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
feature_df = pd.DataFrame(np.arange(6).reshape(3, 2), columns=["feature_1", "feature_2"])
label_df = pd.DataFrame(np.array([[1], [0], [0]]), columns=["label"])
df = pd.concat([feature_df, label_df], axis=1)
X_train, X_test, y_train, y_test = train_test_split(df.drop(["label"], axis=1), df["label"], test_size=1 / 3)
clf = SVC(kernel='linear')
clf.fit(X_train, y_train)
clf.predict(X_test)
То есть после преобразования вашего фрейма данных, чтобы он содержал только цифры c значения, вам нужно создать собственный столбец для каждого элемента в списках вашего столбца функции. Вы можете сделать это так:
arr = np.concatenate(df_numeric.features.to_numpy()).reshape(df_numeric.shape)
df_sklearn_compatible = pd.concat([pd.DataFrame(arr, columns=["feature_1", "feature_2"]),
df["label"]],
axis=1)