数据集中分类变量之间的相关性
Correlation between Categorical variables within a dataset
我有两个关于预测模型数据集中分类变量之间相关性的问题。
使用 Cramers V 和 TheilU 双重检查相关性。
- 我的两个变量从 Cramers V 得到了 1.0,但是,当我使用 TheilU 方法时我只得到了 0.2,我不确定如何解释这两个变量之间的关系?
- 同样对于那些有经验的人来说,如果我得到 2 个变量的相关性 0.73,我是否应该删除预测模型的一个变量?
在此先感谢您!
好吧,您可能想将非数字转换为数字。我不认为我已经看到非数字的相关性,但也许那里有一些东西。不过,不确定它是如何工作的。如果您考虑一下,您会如何将下面的公式应用于非数字数据?
无论如何,这里有一些示例代码供您试验。
仅供参考:具体查看“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);
dfDummies = pd.get_dummies(df)
plt.figure(figsize=(14,12))
sns.heatmap(dfDummies.corr(),linewidths=.1,cmap="YlGnBu", annot=True)
plt.yticks(rotation=0);
有关详细信息,请参阅下面的 link。
http://queirozf.com/entries/one-hot-encoding-a-feature-on-a-pandas-dataframe-an-example
示例数据来自下面的 link 和该页面的底部。
https://www.kaggle.com/haimfeld87/analysis-and-classification-of-mushrooms/data
如果您发现某些内容实际上是基于不将分类数据转换为数字数据的方法,请分享您的发现。我想看看!!
我有两个关于预测模型数据集中分类变量之间相关性的问题。 使用 Cramers V 和 TheilU 双重检查相关性。
- 我的两个变量从 Cramers V 得到了 1.0,但是,当我使用 TheilU 方法时我只得到了 0.2,我不确定如何解释这两个变量之间的关系?
- 同样对于那些有经验的人来说,如果我得到 2 个变量的相关性 0.73,我是否应该删除预测模型的一个变量?
在此先感谢您!
好吧,您可能想将非数字转换为数字。我不认为我已经看到非数字的相关性,但也许那里有一些东西。不过,不确定它是如何工作的。如果您考虑一下,您会如何将下面的公式应用于非数字数据?
无论如何,这里有一些示例代码供您试验。
仅供参考:具体查看“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);
dfDummies = pd.get_dummies(df)
plt.figure(figsize=(14,12))
sns.heatmap(dfDummies.corr(),linewidths=.1,cmap="YlGnBu", annot=True)
plt.yticks(rotation=0);
有关详细信息,请参阅下面的 link。
http://queirozf.com/entries/one-hot-encoding-a-feature-on-a-pandas-dataframe-an-example
示例数据来自下面的 link 和该页面的底部。
https://www.kaggle.com/haimfeld87/analysis-and-classification-of-mushrooms/data
如果您发现某些内容实际上是基于不将分类数据转换为数字数据的方法,请分享您的发现。我想看看!!