機器學習實戰 關聯規則

2021-10-10 13:05:11 字數 4200 閱讀 8328

``資料探勘就是對資料進行處理,並以某種方式分析源資料,從中發現一些潛在的

有用的資訊,所以資料探勘又稱作知識發現。這裡的「某種方式」就是機器學習演算法。

關聯規則作為經典機器學習演算法之一,搞懂關聯規則自然有著很重要的意義。顧名思義,

關聯規則就是發現資料背後存在的某種規則或者聯絡。

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

%matplotlib inline

%config inlinebbackend.figure_format=

"retina"

from matplotlib.font_manager import fontproperties

fonts=fontproperties(fname=

"/windows/fonts/simyou.ttf/",size=15)

#開啟控制面板檢視字型找到自帶的字型

import statsmodels.api as sm

import statsmodels.formula.api as smf

from sklearn import metrics

from sklearn.model_selection import train_test_split

datadf=pd.read_excel(

"調查問卷2.xls"

)# print(datadf.head())

#分析這13個問題每個問題出現的次數,並繪製直方圖

dataflatten=np.array(datadf.iloc[:,1::]

).flatten(

)dataflatten=pd.dataframe(

)##計算出出現的頻率

datadfre=dataflatten.groupby(by=

["value"])

["value"

].count(

)#檢視統計後的結果

# print(datadfre)

datadfre=pd.dataframe(

).sort_values(

"freq",ascending=0)

datadfre.plot(kind=

'bar',figsize=

(12,6),legend=none)

plt.title(

"選項出現的頻次",fontproperties=fonts)

plt.ylabel(

"頻次",fontproperties=fonts,size=12)

plt.xlabel("")

plt.xticks(range(len(datadfre)),datadfre[

"item"

],rotation=90,fontproperties=fonts,size=15)

plt.rcparams[

'font.sans-serif']=

['simhei'

]#顯示中文標籤

上述**解釋:

(1)使用np.array()將資料**中的資料生成陣列

(2)使用陣列的flatten方法,生成乙個一維陣列,特徵為value,以方便計算頻次。使用groupby函式計算。程式中使用sort_values(「freq」,ascending=0)

針對資料進行排序,並且使用引數ascending=0指定為降序排列

(3)最後使用資料表的plot()方法繪製直方圖。得到選項頻次直方圖。

使用plt.xticks來指定x座標軸上刻度的顯示內容,並且使用rotation=90將其旋轉90度

plt.rcparams[『font.sans-serif』]=[『simhei』] #顯示中文標籤

plt.rcparams[『axes.unicode_minus』]=false

這兩行**是為了讓圖表中的中文正常顯示出來

對圖表資料的理解:

從頻次直方圖可以看出「理工科」出現的次數最多,以及『一直反覆**』頻率最低,在某種程度上說明了該調查問卷的主體是理工科學生,而且並不

會有很多大學生去反覆**真人騷節目。

使用mlxtend庫中的frequent_pattern模組進行關聯規則學習。主要用apriori和association_rules函式,其中apriori用於找到資料集中的頻繁項集,而

association_rules則可以用來生成關聯規則

在挖掘頻繁項集之前,需要對資料集進行處理,對資料重新編碼,重新編碼後資料集**現的專案會作為列的名稱

每個樣本如果含有該專案則對應位置會為1,否則為0.使用transactionencoder對原始資料進行重新編碼。

from mlxtend.frequent_patterns import apriori,association_rules

from mlxtend.preprocessing import transactionencoder

datanew=np.array(datadf.iloc[:,1::]

)oht=transactionencoder(

)oht_ary=oht.fit_transform(datanew)

oht_ary = oht_ary.astype(

'int'

)df=pd.dataframe(oht_ary,columns=oht.columns_)

df.head(

)##發現頻繁專案集。找出最小支援度為0.3的頻繁項集,可以得到138項,其中至少包含2個專案的項集有120個。**如下

df_fre=apriori(df,min_support=0.3,use_colnames=true)

#為找到頻繁專案新增專案長度

對資料集進行編碼

將編碼後的資料集做成資料表,每列為各個選項

from mlxtend.preprocessing import transactionencoder # 傳入模型的資料需要滿足特定的格式,可以用這種方法來轉換為bool值,也可以用函式轉換為0、1

rule1=association_rules(df_fre,metric=

"lift",min_threshold=1.1)

# print(rule1)

#計算前項(antecedents)的長度

從輸出結果發現提公升度大於1.1的規則一共得到了12條,這12條的各個規則可以通過前面的資料表輸出檢視,結果中同時計算出了支援度、置信度和

提公升度的取值。

#找到置信度》0.7,前項長度》1的規則

在上面的程式中使用(rule1.antelen>1)&(rule1.confidence>0.7)來保證同時滿足2個條件的例項。從輸出的規則中可以看出,男性中對真人騷節目

沒有很高興趣(一遍就夠或偶爾討論)通常都是理工男。

機器學習 淺嚐關聯規則

理解關聯規則 首先要感謝一下沃爾瑪 第乙個發現並挖掘出來了關聯規則 沃爾瑪對市場購物籃分析的結果是一組指定商品之間關係模式的關聯規則 乙個典型的規則可以表述為 第乙個關聯規則用通俗易懂的語言來表達就是 如果購買了花生醬和果醬,那麼也很有可能會購買麵包 第二個關聯規則也可以簡單的來表達 就是你把啤酒放...

機器學習 關聯規則與FP Tree

fp tree演算法只需要遍歷一次事務,然後可以建立fp tree樹形資料結構來表徵事務專案出現的關係。fp tree相比原始事務,將各個事務壓縮到乙個樹,儲存了專案之間的關係和出現頻數,但是規模小得多。我可以直接根據fp tree來獲取所有事務專案集合出現的次數。下面是初始化步驟 1 事務專案排序...

機器學習 Apriori演算法(關聯規則)

上來乙個公式 支援度 p a b 既有a又有b的概率 置信度 p b a 在a發生的事件中同時發生b的概率 p ab p a 例如購物籃分析 牛奶 麵包 例子 支援度 3 置信度 40 支援度3 意味著3 顧客同時購買牛奶和麵包 置信度40 意味著購買牛奶的顧客40 也購買麵包 如果事件a中包含k個...