Как мне предварительно обработать набор данных, если диапазон объектов слишком велик? - PullRequest
1 голос
/ 13 июля 2020

У меня есть набор данных с 5 функциями, и каждый столбец находится в другом диапазоне чисел. Я пробовал использовать MinMaxScaler и StandardScaler, но точность для этой многоклассовой проблемы слишком низкая.

введите описание изображения здесь

1 Ответ

0 голосов
/ 13 июля 2020

Если StandardScaler и MinMaxScaler не дают желаемого эффекта, тогда еще одна вещь, которую нужно проверить, - это искаженные данные:

# Check the skew of all numerical features
numeric_feats = all_data.dtypes[all_data.dtypes != "object"].index
skewed_feats = all_data[numeric_feats].apply(lambda x: skew(x.dropna())).sort_values(ascending=False)
print("\nSkew in numerical features: \n")
skewness = pd.DataFrame({'Skew' :skewed_feats})
skewness.head(10)

Чем меньше, тем лучше. Если вы получили высокие баллы, вы можете использовать преобразование (log, boxcox, et c), чтобы сделать распределение данных более нормальным по форме.

коррекция перекоса:

skewness = skewness[abs(skewness) > 0.75]
print("There are {} skewed numerical features to Box Cox transform".format(skewness.shape[0]))

from scipy.special import boxcox1p
skewed_features = skewness.index

lam_f = 0.15
for feat in skewed_features:
    #all_data[feat] += 1
    all_data[feat] = boxcox1p(all_data[feat], lam_f)

Что еще можно попробовать:

либо удалите листовки, либо попробуйте RobustScaler () PowerTransformer ()

Ссылка: https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html

...