Мне интересно, можно ли обнаружить выбросы в категориальных данных. например, если у меня есть список:
l = ['fresh','good','nice','great','amazing','bad','tasty','funny','dirty']
Выброс в этом списке будет строки 'bad'
и 'dirty'
.
Если, например, у меня есть данные 10000 строк, и каждая строкаэто предложение между 2 и 10 словами, возможно ли обнаружить выбросы с помощью алгоритма Isolation forest
? Какой кодер я должен использовать? Кроме того, я получаю ошибку, когда я пытаюсь запустить код, ошибка в этой строке:
input_par = encoder.transform([val])
Это пример кода, который я написал:
import pandas as pd
from sklearn.ensemble import IsolationForest
from sklearn.model_selection import GridSearchCV
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, LabelEncoder, StandardScaler
l = ['fresh','good','nice','great','amazing','bad','tasty','funny','dirty',
'I love you', 'you are great', 'this is wrong', 'terrible']
df = pd.DataFrame({'my text': l})
x = df
# Transform the features
encoder = ColumnTransformer(transformers=[('onehot', OneHotEncoder(), ['my text'])], remainder='passthrough')
x = encoder.fit_transform(x)
isolation_forest = IsolationForest(contamination = 'auto', behaviour = 'new')
model = isolation_forest.fit(x)
list_of_val = ['i love this', 'catastrophic', 'no']
for val in list_of_val:
input_par = encoder.transform([val])
outlier = model.predict(input_par)
#print(outlier)
if outlier[0] == -1:
print('Values', val, 'are outliers')
else:
print('Values', val, 'are not outliers')