Корреляция между категориальными переменными в наборе данных - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть два вопроса о корреляции между категориальными переменными из моего набора данных для прогнозирования моделей. Используя Cramers V и TheilU для двойной проверки корреляции.

  • Я получил 1,0 от Cramers V для двух моих переменных, однако, я получил только 0,2, когда использовал метод TheilU, я не уверен, как интерпретировать отношения между двумя переменными?
  • Также для тех, кто имеет опыт, если я получил 0,73 для корреляции 2 переменных, я должен удалить одну из переменных для модели прогнозирования?

Заранее большое спасибо!

1 Ответ

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

Ну, вы, вероятно, хотите преобразовать нечисловые числа в числовые. Я не думаю, что видел корреляции нечисловых, но, возможно, что-то есть. Не уверен, как это будет работать, хотя. Если подумать, как бы вы применили приведенную ниже формулу к нечисленным c данным?

enter image description here

В любом случае, вот пример код для эксперимента.

К вашему сведению: посмотрите на 'labelencoder' и 'dfDummies'.

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt
#%matplotlib inline
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

from sklearn.metrics import classification_report, confusion_matrix, precision_recall_curve, auc, roc_curve
from sklearn.tree import DecisionTreeClassifier, export_graphviz
import graphviz

df = pd.read_csv('C:\\Users\\ryans\\OneDrive\\Desktop\\mushrooms.csv')

df.columns

df.head(5)

# The data is categorial so I convert it with LabelEncoder to transfer to ordinal.

labelencoder=LabelEncoder()
for column in df.columns:
    df[column] = labelencoder.fit_transform(df[column])

#df.describe()


#df=df.drop(["veil-type"],axis=1)

#df_div = pd.melt(df, "class", var_name="Characteristics")
#fig, ax = plt.subplots(figsize=(10,5))
#p = sns.violinplot(ax = ax, x="Characteristics", y="value", hue="class", split = True, data=df_div, inner = 'quartile', palette = 'Set1')
#df_no_class = df.drop(["class"],axis = 1)
#p.set_xticklabels(rotation = 90, labels = list(df_no_class.columns));

#plt.figure()
#pd.Series(df['class']).value_counts().sort_index().plot(kind = 'bar')
#plt.ylabel("Count")
#plt.xlabel("class")
#plt.title('Number of poisonous/edible mushrooms (0=edible, 1=poisonous)');


plt.figure(figsize=(14,12))
sns.heatmap(df.corr(),linewidths=.1,cmap="YlGnBu", annot=True)
plt.yticks(rotation=0);

enter image description here

dfDummies = pd.get_dummies(df)

plt.figure(figsize=(14,12))
sns.heatmap(dfDummies.corr(),linewidths=.1,cmap="YlGnBu", annot=True)
plt.yticks(rotation=0);

enter image description here

Для получения дополнительной информации см. Ссылку ниже.

http://queirozf.com/entries/one-hot-encoding-a-feature-on-a-pandas-dataframe-an-example

Пример данных приведен по ссылке ниже и в нижней части этой страницы.

https://www.kaggle.com/haimfeld87/analysis-and-classification-of-mushrooms/data

Если вы найдете что-то, что на самом деле основано на методе НЕ преобразования категориальные данные в цифру c данных, пожалуйста, поделитесь своими выводами. Я хотел бы видеть это !!

...