大師兄的數(shù)據(jù)分析學習筆記(八):探索性數(shù)據(jù)分析(七)

大師兄的數(shù)據(jù)分析學習筆記(七):探索性數(shù)據(jù)分析(六)
大師兄的數(shù)據(jù)分析學習筆記(九):特征工程

五、復合分析的實現(xiàn)

3. 相關(guān)分析
  • 相關(guān)分析是衡量兩組數(shù)據(jù)分布趨勢或變化趨勢的分析方法。
  • 相關(guān)分析使用相關(guān)系數(shù)直接衡量相關(guān)性的大小。
  • 如果用相關(guān)系數(shù)直接衡量連續(xù)值的相關(guān)性:
>>>import os
>>>import pandas as pd
>>>import matplotlib.pyplot as plt
>>>import seaborn as sns

>>>df = pd.read_csv(os.path.join(".","data","WA_Fn-UseC_-HR-Employee-Attrition.csv"))
>>>corr = df.corr()
>>>sns.heatmap(corr,vmin=-1,vmax=1,cmap=sns.color_palette("RdBu",n_colors=128))
>>>plt.show()
  • 上圖中顏色越偏藍的部分正相關(guān)性越高,越偏紅的部分負相關(guān)性越高。
  • 如果是二類離散屬性,比如:true/false,可以用皮爾遜相關(guān)系數(shù)來直接衡量相關(guān)性的大小。
  • 如果是多類離散屬性,且數(shù)據(jù)是定序數(shù)據(jù),比如:low/median/high,也可以使用皮爾遜相關(guān)系數(shù)。
  • 更為常見的離散屬性相關(guān)性系數(shù),使用熵(entropy)來計算:
  • 是用來計算不確定性的值,:H(X) = - \sum{p_i\log{(p_i)}}
  • 越接近0表示不確定性越小,如果樣本的類別越多且分布越均勻,的值越大。
  • 條件熵H(Y|X) = \sum{p(x_i)}H(Y|X=x_i),表示在X條件下,Y的熵為X分布下對Y分別計算熵,并求和。
  • 熵增益I(X,Y) = H(Y) - H(Y|X) = H(X) - H(X|Y),表示條件熵對比減少的部分。
  • 熵增益對于分類數(shù)目多的特征有不正確的偏向,不具備歸一化的特點。
  • 為了解決上面的問題,可以使用熵的增益率GainRatio(X->Y) = \frac{I(X,Y)}{H(Y)},也就是熵增益/Y的,可以獲得一個0-1的值。
  • 但由于熵的增益率是不對稱的,所以如果要計算相關(guān)性,還需要進行轉(zhuǎn)化:Corr(X,Y) = \frac{I(X,Y)}{\sqrt{H(X)H(Y)}}
>>>import os
>>>import pandas as pd
>>>import numpy as np
>>>import math

>>>df = pd.read_csv(os.path.join(".", "data", "WA_Fn-UseC_-HR-Employee-Attrition.csv"))
>>>s1 = df[df.Gender == "Male"].EducationField.head(50).reset_index(drop=True)  # 男性的教育領(lǐng)域
>>>s2 = df[df.Gender == "Female"].EducationField.head(50).reset_index(drop=True)  # 女性的教育領(lǐng)域


>>>def getEntropy(s: pd.Series) -> float:
>>>    """求熵
>>>
>>>    求熵
>>>
>>>    :param s:
>>>    :return:
>>>    """
>>>    prt_ary = s.groupby(s).count().values / float(len(s))
>>>    return -((np.log2(prt_ary)) * prt_ary).sum()


>>>def getCondEntropy(s1: pd.Series, s2: pd.Series) -> float:
>>>    """求條件熵
>>>
>>>    求條件熵
>>>
>>>    :param s1:
>>>    :param s2:
>>>    :return:
>>>    """
>>>    d = {}
>>>    for i in range(len(s1)):
>>>        d[s1[i]] = d.get(s1[i], []) + [s2[i]]
>>>    return sum([getEntropy(pd.Series(d[k])) * len(d[k]) / float(len(s1)) for k in d])


>>>def getEntropyGain(s1: pd.Series, s2: pd.Series) -> float:
>>>    """ 求熵增益
>>>
>>>    求熵增益
>>>
>>>    :param s1:
>>>    :param s2:
>>>    :return:
>>>    """
>>>    return getEntropy(s2) - getCondEntropy(s1, s2)


>>>def getEntropyGainRate(s1: pd.Series, s2: pd.Series) -> float:
>>>    """求熵增益
>>>
>>>    求熵增益
>>>
>>>    :param s1:
>>>    :param s2:
>>>    :return:
>>>    """
>>>    return getEntropyGain(s1, s2) / getEntropy(s2)


>>>def getDiscreteCorr(s1: pd.Series, s2: pd.Series) -> float:
>>>    """求離散值的相關(guān)性
>>>
>>>    求離散值的相關(guān)性
>>>
>>>    :param s1:
>>>    :param s2:
>>>    :return:
>>>    """
>>>    return getEntropyGain(s1, s2) / math.sqrt(getEntropy(s1) * getEntropy(s2))


>>>print(f"Entropy:{getEntropy(s1)}")
>>>print(f"CondEntropy:{getCondEntropy(s1, s2)}")
>>>print(f"EntropyGain:{getEntropyGain(s1, s2)}")
>>>print(f"EntropyGainRate:{getEntropyGainRate(s1, s2)}")
>>>print(f"getDiscreteCorr:{getDiscreteCorr(s1, s2)}")
Entropy:1.8508248804997625
CondEntropy:1.8971515588855379
EntropyGain:0.24367912565724215
EntropyGainRate:0.11382456698544799
getDiscreteCorr:0.1224177809220504
4. 因子分析
  • 因子分析就是從多個屬性變量中,分析共性和相關(guān)因子的方法,是一種比較綜合的分析方法。
  • 因子分析可以分為探索性因子分析驗證性因子分析
  • 探索性因子分析:指通過協(xié)方差矩陣、相關(guān)性矩陣等指標分析多元屬性變量的本質(zhì)結(jié)構(gòu),并可以進行轉(zhuǎn)化、降維等操作,得到數(shù)據(jù)空間中、或者影響目標屬性的最主要的因子,比如主成分分析法就是典型的探索性分析。
  • 驗證性因子分析:是驗證一個因子,與關(guān)注屬性之間是否有關(guān)聯(lián),有什么樣的關(guān)聯(lián),是不是符合預期等,比如假設(shè)檢驗、相關(guān)分析、回歸分析等方法都是驗證性因子分析。
>>>import os
>>>import matplotlib.pyplot as plt
>>>import pandas as pd
>>>import seaborn as sns
>>>from sklearn.decomposition import PCA

>>>df = pd.read_csv(os.path.join(".", "data", "WA_Fn-UseC_-HR-Employee-Attrition.csv"))
>>>my_pca = PCA(n_components=7)
>>>lower_mat = my_pca.fit_transform(df.drop(labels=["HourlyRate","Department","BusinessTravel","EducationField","Gender","JobRole"],axis=1))
>>>print(f"PCA_Ratio:{my_pca.explained_variance_ratio_}")
PCA_Ratio:[0.54301451 0.42574507 0.00789838 0.00776119 0.00646712 0.00585612
 0.00325762]
>>>sns.heatmap(pd.DataFrame(lower_mat).corr(),vmin=-1,vmax=1,cmap=sns.color_palette("RdBu",n_colors=64))
>>>plt.show()
5. 總結(jié)
數(shù)據(jù)類型 應對方法
連續(xù):聯(lián)系 假設(shè)檢驗、相關(guān)系數(shù)
連續(xù):離散(二值) 相關(guān)系數(shù)、最小基尼系數(shù)切分、最大熵增益切分
連續(xù):離散(非二值) 相關(guān)系數(shù)(定序)
離散(二值):離散(二值) 相關(guān)系數(shù)、熵相關(guān)、F分值
離散:離散(非二值) 熵相關(guān)、基尼系數(shù)、相關(guān)系數(shù)(定序)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容