如何使用MySQL資料庫進行關聯規則挖掘?

PHPz
發布: 2023-07-12 20:06:07
原創
686 人瀏覽過

如何使用MySQL資料庫進行關聯規則挖掘?

引言:
關聯規則挖掘是一種資料探勘技術,用於發現資料集中項目之間的關聯關係。 MySQL是一個廣泛使用的關聯式資料庫管理系統,具有強大的資料處理和查詢功能。本文將介紹如何使用MySQL資料庫進行關聯規則挖掘,包括資料準備、關聯規則挖掘演算法、SQL語句實作以及程式碼範例。

一、資料準備
在進行關聯規則挖掘之前,首先需要準備適當的資料集。資料集是關聯規則挖掘的基礎,它包含了需要挖掘的事務和項目集。在MySQL中,可以透過建立資料表來儲存資料集。例如,假設我們要挖掘購物籃資料中的關聯規則,可以建立一個名為「transactions」的資料表來儲存每位顧客的購物記錄,其中每筆記錄包含一個顧客的多個購買商品。

CREATE TABLE transactions (
customer_id INT,
item_id INT
);

然後將購物籃資料插入資料表中:

INSERT INTO transactions (customer_id, item_id) VALUES
(1, 101),
(1, 102),
(1, 103),
(2, 101),
(2, 104),
(3, 102),
(3, 105),
(4, 101),
(4, 103),
(4, 104);

二、關聯規則探勘演算法
常見的關聯規則探勘演算法有Apriori演算法和FP-Growth演算法。 Apriori演算法是一種基於候選集的迭代演算法,透過逐步產生候選集和計算支持度閾值來發現頻繁項目集和關聯規則。 FP-Growth演算法是一種基於前綴樹的演算法,可以有效率地挖掘頻繁項目集和關聯規則。在MySQL中,我們可以使用SQL語句來實作這兩種演算法。

三、SQL語句實作

  1. Apriori演算法
    Apriori演算法包含兩個步驟:頻繁項目集產生和關聯規則產生。首先,透過下列SQL語句產生頻繁項目集:

SELECT item_id, COUNT(*) AS support
FROM transactions
GROUP BY item_id
HAVING support >= min_support;

其中,「item_id」是項目集中的項目,「support」是項目集的支持度,「min_support」是設定的最小支持度閾值。這條SQL語句會傳回滿足最小支援度要求的頻繁項目集。

然後,透過以下SQL語句產生關聯規則:

SELECT t1.item_id AS antecedent, t2.item_id AS consequent,

   COUNT(*) / (SELECT COUNT(*) FROM transactions) AS confidence
登入後複製
登入後複製
登入後複製
登入後複製

FROM transactions AS t1, transactions AS t2
WHERE t1.item_id != t2.item_id
GROUP BY t1.item_id, t2.item_id
HAVING confidence >= min_confidence;

其中,「antecedent」是規則的前項,「consequent」是規則的後項,「confidence」是規則的置信度,「min_confidence」是設定的最小置信度閾值。這條SQL語句會傳回滿足最小置信度要求的關聯規則。

  1. FP-Growth演算法
    FP-Growth演算法透過建立前綴樹來挖掘頻繁項目集和關聯規則。在MySQL中,可以使用臨時表和使用者定義變數來實現FP-Growth演算法。

首先,建立一個暫存資料表來儲存專案的頻繁項集:

CREATE TEMPORARY TABLE frequent_items (
item_id INT,
support INT
);

然後,透過以下SQL語句產生頻繁項集:

INSERT INTO frequent_items
SELECT item_id, COUNT(*) AS support
FROM transactions
GROUP BY item_id
HAVING support >= min_support;

接下來,建立一個使用者定義變數來儲存頻繁項目集:

SET @frequent_items = '';

然後,透過以下SQL語句產生關聯規則:

SELECT t1.item_id AS antecedent, t2.item_id AS consequent,

   COUNT(*) / (SELECT COUNT(*) FROM transactions) AS confidence
登入後複製
登入後複製
登入後複製
登入後複製

FROM transactions AS t1, transactions AS t2
WHERE t1.item_id ! = t2.item_id
AND FIND_IN_SET(t1.item_id, @frequent_items) > 0
AND FIND_IN_SET(t2.item_id, @frequent_items) > 0
GROUP BY t1.item_gt; #HAVING confidence >= min_confidence;

最後,通過以下SQL語句更新用戶定義變量:

SET @frequent_items = (SELECT GROUP_CONCAT(item_id) FROM frequent_items);

四、程式碼範例

以下是使用MySQL資料庫進行關聯規則挖掘的程式碼範例:
##-- 建立資料表

CREATE TABLE transactions (

customer_id INT,
item_id INT
);

-- 插入購物籃資料

INSERT INTO transactions (customer_id, item_id) VALUES

(1, 101),
(1, 102),
(1, 103),
(2, 101),
(2, 104),
(3, 102),
(3, 105),
(4, 101) ,
(4, 103),
(4, 104);

-- Apriori演算法

-- 產生頻繁項目集

SELECT item_id, COUNT(*) AS support
FROM transactions
GROUP BY item_id
HAVING support >= 2;

-- 產生關聯規則

SELECT t1.item_id AS antecedent, t2.item_id AS consequent,# #
   COUNT(*) / (SELECT COUNT(*) FROM transactions) AS confidence
登入後複製
登入後複製
登入後複製
登入後複製

FROM transactions AS t1, transactions AS t2
WHERE t1.item_id != t2.item_id

GROUP BY t1.item_id, t2.item_id

HAVING confidence >= 0.5;
##-- FP-Growth演算法
-- 建立暫存表
CREATE TEMPORARY TABLE frequent_items (

item_id INT,

support INT
);

-- 產生頻繁項集
INSERT INTO frequent_items
SELECT item_id, COUNT(*) AS support
FROM transactions
GROUP BY item_id
HAVING support &#gt;

#-- 建立使用者定義變數

SET @frequent_items = '';

-- 產生關聯規則

SELECT t1.item_id AS antecedent, t2.item_id AS consequent,

   COUNT(*) / (SELECT COUNT(*) FROM transactions) AS confidence
登入後複製
登入後複製
登入後複製
登入後複製
FROM transactions AS t1, transactions AS t2

WHERE t1.item_id != t2.item_id
AND FIND_IN_SET(t1.item_id, @frequent_items) > 0#14#.IN_SET(p. @frequent_items) > 0
GROUP BY t1.item_id, t2.item_id
HAVING confidence >= 0.5;

結論:

透過本文的介紹,我們了解如何使用MySQL資料庫進行關聯規則挖掘。無論是Apriori演算法還是FP-Growth演算法,都可以透過SQL語句實現。希望本文對你在使用MySQL進行關聯規則挖掘時有所幫助。

以上是如何使用MySQL資料庫進行關聯規則挖掘?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!