關於資料探勘關聯規則的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...