關於資料探勘關聯規則的Oracle實現

2021-05-23 00:32:46 字數 3083 閱讀 3269

關於資料探勘關聯規則的oracle 實 現

呵呵,前幾天拿到了資料探勘基礎教程一書,感覺部分演算法是基於統計學的原理的,而統計學是可以通過

oracle

來實現。

其次是為了**德國

vs西班牙的世界盃比賽,來了一點小小的興致,動手寫點小指令碼。不過本文只是為了實現而實現的,沒有做 任何優化,有興趣的話,大家可以玩一玩。

關於資料探勘關聯規則的材料,可以參見:

關聯規則是形如x→

y的蘊涵式,

其中且,x和

y分別稱為關聯規則的先導

(antecedent

或left-hand-side, lhs)

和後繼(consequent

或right-hand-side, rhs) 。

關聯規則在

d中的支援度

(support)是d

中事務同時包含x、

y的百分比,即概率;

=x^y/d

置信度(confidence)

是包含x

的事務中同時又包含

y的百分比,即條件概率。

=(x^y)/x

關聯規則是有趣的,如果滿足最小支援度閾值和最小置信度閾值。

若給定最小支援度α

= n,最小置信度β

= m,則分別通過以上的

x^y/d

和(x^y)/x

,可獲知是否存在關聯

使用的原始資料

反正規化後的資料

待統計項

--建立各個購買單元項檢視

create view distinct_trans as select distinct tranobject from purchase; --

建立各個事務內部的購買單元項

create view all_trans as

--可以用wm_concat函式

select tranid,max(tranobjects) tranobjects

from (select tranid,wmsys.wm_concat(tranobject) over(partition by tranid order by tranobject) tranobjects

from purchase )

group by tranid;

--也可以用

sys_connect_by_path函式

create view all_trans as

select tranid,substr(tranobjects,2) tranobjects from  --

格式化前面的逗號和空格 (

select distinct tranid,first_value(tranobjects) over(partition by tranid order by levels desc ) as tranobjects  --

保留最大的那個

from (

select tranid,sys_connect_by_path(tranobject,',') tranobjects,level levels --

各購買事務的內部排列組合

from purchase

connect by tranid=prior tranid and tranobject )

);

--對所有購買單元項進行排列組合,即資料探勘的

x^y項

create view all_zuhe as

select substr(sys_connect_by_path(tranobject,','),2) zuhe

from (select distinct tranobject from purchase)

connect by nocycle tranobject

select * from all_zuhe --

篩選出符合要求的排列組合,即資料探勘的x項和

y項create view full_zuhe as

select a.zuhe x,b.zuhe y from all_zuhe a,all_zuhe b

where instr(a.zuhe,b.zuhe)=0 and instr(b.zuhe,a.zuhe)=0

and not exists(select 1 from distinct_trans c

where instr(a.zuhe,c.tranobject)>0 and instr(b.zuhe,c.tranobject)>0)

select * from full_zuhe  

create or replace view tongji as

select xy,xy_total,x,x_total,y,y_total,transtotal from (

select y||','||x xy,

(select count(*) from all_trans a where instr(a.tranobjects,c.x||','||c.y)>0 or instr(a.tranobjects,c.y||','||c.x)>0) xy_total, --

包含xy

的事務數

y,(select count(*) from all_trans b where instr(b.tranobjects,c.y)>0) y_total, --包含y

的事務數

x,(select count(*) from all_trans b where instr(b.tranobjects,c.x)>0) x_total, --包含x

的事務數

d.transtotal  --

總事務數

from full_zuhe c,(select count(distinct tranid) transtotal from purchase) d

order by xy_total desc,x_total desc )

select * from tongji where xy_total>=3 and y_total>=3

資料探勘 關聯規則挖掘

關聯規則 association rule 是資料中所蘊含的一類重要規律。關聯規則挖掘的目標是在資料專案中找出所有的併發關係 cooccurrence relationships 這種關係也稱為關聯 association 關聯規則挖掘的經典應用是購物籃 market basket 關聯規則挖掘並沒...

關於資料探勘關聯規則的Oracle實現

關於資料探勘關聯規則的oracle實 現 呵呵,前幾天拿到了資料探勘基礎教程一書,感覺部分演算法是基於統計學的原理的,而統計學是可以通過 oracle 來實現。其次是為了 德國 vs西班牙的世界盃比賽,來了一點小小的興致,動手寫點小指令碼。不過本文只是為了實現而實現的,沒有做 任何優化,有興趣的話,...

關聯規則挖掘

關聯規則反映事物之間的相互依存性和關聯性。如果事物之間存在一定的關聯,那麼我們就可以通過乙個事物去 另乙個事物。我們要挖掘大量資料中人們感興趣的,有價值的資訊,包括概念,規則,規律等。關聯規則 發現資料中的規律 超市中什麼產品會 起購買?組合推薦 顧客在買了 臺pc之後下 步會購買?搭配推薦 哪種d...