Какой алгоритм использовать для задачи кластеризации, когда у нас есть числовые и категориальные данные? - PullRequest
1 голос
/ 18 апреля 2020

Я почти новичок в кластеризации и немного запутался в способе использования. У меня есть набор зданий, которые я хочу объединить в группы в соответствии с их потреблением энергии, размером, типом и соседством. Я использовал метод k-средних и использовал метод "get_dummies" для работы с моими категориальными данными.

Я хотел бы спросить, является ли это правильным способом работы с категориальными данными? (Я также попытался просто сопоставить их с числами вроде 1,2,3 и т. Д. c и нормализовать их перед кластеризацией, но не получил подходящих результатов) В случае, если вы предлагаете другой алгоритм (случайный лес, svm или что-то еще) ) Я ценю, если вы предоставите мне ссылку или сайт, чтобы узнать это.

Другой вопрос: если я хочу, чтобы одна из моих функций оказывала большее влияние на эту кластеризацию, можно ли умножить ее на 2 после нормализации и затем запустить часть кластеризации?

Спасибо.

** Что я имею в виду под "get_dummies"?

enter image description here

1 Ответ

0 голосов
/ 18 апреля 2020

Я думаю, что это довольно много! Используйте кодировщики меток или горячее кодирование для преобразования нечисловых значений в числовые.

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder# creating initial dataframe
bridge_types = ('Arch','Beam','Truss','Cantilever','Tied Arch','Suspension','Cable')
bridge_df = pd.DataFrame(bridge_types, columns=['Bridge_Types'])# creating instance of labelencoder
labelencoder = LabelEncoder()# Assigning numerical values and storing in another column
bridge_df['Bridge_Types_Cat'] = labelencoder.fit_transform(bridge_df['Bridge_Types'])
bridge_df

Результат:

  Bridge_Types  Bridge_Types_Cat
0         Arch                 0
1         Beam                 1
2        Truss                 6
3   Cantilever                 3
4    Tied Arch                 5
5   Suspension                 4
6        Cable                 2

Или ...

import pandas as pd
import numpy as np# creating initial dataframe
bridge_types = ('Arch','Beam','Truss','Cantilever','Tied Arch','Suspension','Cable')
bridge_df = pd.DataFrame(bridge_types, columns=['Bridge_Types'])# generate binary values using get_dummies
dum_df = pd.get_dummies(bridge_df, columns=["Bridge_Types"], prefix=["Type_is"] )# merge with main df bridge_df on key values
bridge_df = bridge_df.join(dum_df)
bridge_df

Имейте в виду, что если у вас много ярлыков, ваши данные будет довольно редким после того, как вы все сделаете цифру c. Кроме того, да, вы можете «поиграть», удваивая функцию. Вот базовый c пример.

import numpy as np
data = np.asarray([np.asarray(DF['Feature1']),np.asarray(DF['Feature1']),np.asarray(DF['Feature2'])])

Это кажется немного странным, и я никогда не делал этого на практике, но он должен дать вам желаемые результаты. Вы знаете, что ... проверить это и посмотреть, как вы ладите. Наконец, когда у вас будет немного свободного времени, прочитайте материал по ссылке ниже. По этой ссылке вы многому научитесь.

https://scikit-learn.org/stable/modules/clustering.html

...