Я пытаюсь сделать прогноз со своим собственным выводом. Я использую Python Scikit-learn lib и Isolation Forest в качестве алгоритма. Я не знаю, что я делаю неправильно, но когда я хочу преобразовать свои входные данные, я всегда получаю сообщение об ошибке. Я получаю ошибку в этой строке:
input_par = encoder.transform(val)#ERROR
это ошибка: Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
И я пробовал это, но я всегда получаю ошибку:
input_par = encoder.transform([val])#ERROR
это ошибка: alueError: Specifying the columns using strings is only supported for pandas DataFrames
Что я делаю не так, как я могу исправить эту ошибку? Кроме того, я должен использовать OneHotEncoder
, LabelEncoder
или CountVectorizer
?
Это мой код:
import pandas as pd
from sklearn.ensemble import IsolationForest
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
textual_data = ['i love you', 'I love your dress', 'i like that', 'thats good', 'amazing', 'wrong', 'hi, how are you, are you doing good']
num_data = [4, 1, 3, 2, 65, 3,3]
df = pd.DataFrame({'my text': textual_data,
'num data': num_data})
x = df
# Transform the features
encoder = ColumnTransformer(transformers=[('onehot', OneHotEncoder(), ['my text'])], remainder='passthrough')
#encoder = ColumnTransformer(transformers=[('lab', LabelEncoder(), ['my text'])])
x = encoder.fit_transform(x)
isolation_forest = IsolationForest(contamination = 'auto', behaviour = 'new')
model = isolation_forest.fit(x)
list_of_val = [['good work',2], ['you are wrong',54], ['this was amazing',1]]
for val in list_of_val:
input_par = encoder.transform(val)#ERROR
outlier = model.predict(input_par)
#print(outlier)
if outlier[0] == -1:
print('Values', val, 'are outliers')
else:
print('Values', val, 'are not outliers')
РЕДАКТИРОВАТЬ:
Я также пробовал это:
list_of_val = [['good work',2], ['you are wrong',54], ['this was amazing',1]]
for val in list_of_val:
input_par = encoder.transform(pd.DataFrame({'my text': val[0],
'num data': val[1]}))
Но я получаю эту ошибку:
ValueError: If using all scalar values, you must pass an index