データマイニング_クラスター分析、分類子、相関ルール、回帰分析 (Python)

データマイニング

大量のデータから知識を抽出するプロセス。これには、統計、機械学習、人工知能などの多くの分野が含まれます。
通常、コンピュータ プログラムを使用してデータを分析し、根底にある関係やルールを発見し、有用な情報を生成します。

一般的なテクニック

含む:

  • クラスター分析、
  • 分類器、
  • アソシエーションルールマイニング
  • 回帰分析。

データ マイニング学習プラットフォーム (Web サイト):

  • KDnuggets: この Web サイトは、データ マイニングに関連するニュース、教育リソース、ツールを提供します。
  • Journal of Data Mining and Knowledge Discovery: このジャーナルは、
    データ マイニングの分野で最も権威のある学術出版物の 1 つです。
  • データ マイニング技術: このブログでは、データ マイニング技術と実践についての詳細な説明とケース スタディを提供します。

データマイニングのサンプルコード:

クラスター分析(Python)

from sklearn.cluster import KMeans
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0],
              [4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
print(kmeans.labels_)

アソシエーションルールマイニング(Python lib)

  1. アプリオリ アルゴリズム: 頻繁に使用されるアイテムセット マイニングと相関ルール マイニングに使用されます。これは apyori ライブラリを使用して実現できます。

  2. FP 成長アルゴリズム: Apriori アルゴリズムに似ていますが、より高速かつ効率的です。これは、pyfpgrowth ライブラリを使用して実現できます。

Apriori アルゴリズムを使用して相関ルール マイニングを実装する

from apyori import apriori

transactions = [['apple', 'banana'], ['banana', 'orange'], ['apple', 'banana', 'orange'], ['banana', 'orange']]
rules = apriori(transactions, min_support=0.5, min_confidence=0.7)
# 找到了频繁项集,支持度为0.5。
# 如果两个项集的置信度大于0.7,则将它们作为规则输出。
for rule in rules:
    print(rule)

FP-Growth アルゴリズムを使用した相関ルール マイニングの実装

  1. インストールpyfpgrowthライブラリ:
!pip install pyfpgrowth
  1. データセットの準備:
  • Kaggle の e コマース注文データ セットを使用します。
  • データセット内の各注文には、アイテムのセットが含まれています。
  • 注文番号と商品リストを抽出し、商品リストをリスト形式に変換する場合に選択します。
import pandas as pd

# 读取数据
df = pd.read_csv('https://raw.githubusercontent.com/stedy/Machine-Learning-with-R-datasets/master/online-retail/online_retail.csv',
                 header=0, parse_dates=[4], encoding='unicode_escape')

# 提取订单号和商品列表,并将商品列表转换为列表形式
basket = (df[df['Country'] == "United Kingdom"]
          .groupby(['InvoiceNo', 'Description'])['Quantity']
          .sum().unstack().reset_index().fillna(0)
          .set_index('InvoiceNo'))

basket_sets = basket.applymap(lambda x: 1 if x > 0 else 0).astype(int)

  1. 相関ルール マイニングにはpyfpgrowthライブラリを使用します。
  • まず最小サポートと最小信頼を設定し、
  • 次に、find_frequent_patterns() 関数を呼び出して、頻繁に使用されるアイテムセットを検索します
  • 次に、generate_association_rules() 関数を呼び出して関連付けルールを生成します
import pyfpgrowth

# 设置最小支持度和最小置信度
min_support = 0.02
min_confidence = 0.7

# 找到频繁项集
patterns = pyfpgrowth.find_frequent_patterns(basket_sets, int(len(basket_sets) * min_support))

# 生成关联规则
rules = pyfpgrowth.generate_association_rules(patterns, min_confidence)

  1. マイニング結果の表示:
    生成された相関ルールとその信頼性サポートを出力します。
for rule, (support, confidence) in sorted(rules.items(), key=lambda x: x[1][1], reverse=True):
    # 输出关联规则及其置信度和支持度
    antecedent = [item for item in rule]
    consequent = [item for item in basket.columns if item not in antecedent]
    print(f"{
      
      antecedent} => {
      
      consequent} (support={
      
      support}, confidence={
      
      confidence})")

  1. 印刷する
['JUMBO BAG RED RETROSPOT'] => ['JUMBO STORAGE BAG SUKI'] (support=219, confidence=0.7777777777777778)
['REGENCY CAKESTAND 3 TIER'] => ['WHITE HANGING HEART T-LIGHT HOLDER'] (support=233, confidence=0.7209302325581395)
['JUMBO BAG PINK POLKADOT'] => ['JUMBO STORAGE BAG SUKI'] (support=242, confidence=0.7560975609756098)
['LUNCH BAG  BLACK SKULL.'] => ['LUNCH BAG RED RETROSPOT'] (support=139, confidence=0.765625)
['PARTY BUNTING'] => ['JUMBO BAG RED RETROSPOT'] (support=184, confidence=0.7551020408163266)
['JUMBO STORAGE BAG SUKI'] => ['JUMBO BAG PINK POLKADOT'] (support=242, confidence=0.7023255813953488)
['LUNCH BAG PINK POLKADOT'] => ['LUNCH BAG RED RETROSPOT'] (support=180, confidence=0.7843137254901961)
['LUNCH BAG CARS BLUE'] => ['LUNCH BAG RED RETROSPOT'] (support=177, confidence=0.8240740740740741)
['LUNCH BAG SPACEBOY DESIGN'] => ['LUNCH BAG RED RETROSPOT'] (support=161, confidence=0.7385321100917431)
['WOODEN PICTURE FRAME WHITE FINISH'] => ['WOODEN FRAME ANTIQUE WHITE '] (support=144, confidence=0.7972027972027972)
['JUMBO BAG RED RETROSPOT'] => ['JUMBO BAG PINK POLKADOT'] (support=219, confidence=0.7777777777777778)
['LUNCH BAG WOODLAND'] => ['LUNCH BAG RED RETROSPOT'] (support=158, confidence=0.7939698492462312)
['LUNCH BAG RED SPOTTY'] => ['LUNCH BAG RED RETROSPOT'] (support=228, confidence=0.9421487603305785)
['LUNCH BAG SUKI DESIGN '] => ['LUNCH BAG RED RETROSPOT'] (support=176, confidence=0.839905352113281)
['SET OF 3 CAKE TINS PANTRY DESIGN '] => ['SET OF 3 RETROSPOT CAKE TINS'] (support=134, confidence=0.8564102564102564)
['JUMBO STORAGE BAG SKULLS'] => ['JUMBO BAG RED RETROSPOT'] (support=125, confidence=0.7515151515151515)
['JUMBO BAG APPLES'] => ['JUMBO BAG RED RETROSPOT'] (support=174, confidence=0.8536585365853658)
['LUNCH BAG APPLE DESIGN'] => ['LUNCH BAG RED RETROSPOT'] (support=168, confidence=0.7428571428571429)
['RECYCLING BAG RETROSPOT'] => ['JUMBO BAG RED RETROSPOT'] (support=155, confidence=0.825531914893617)
['PANTRY ROLLING PIN'] => ['SET OF 3 RETROSPOT CAKE TINS'] (support=136, confidence=0.7431693989071039)
['PLASTERS IN TIN SPACEBOY'] => ['PLASTERS IN TIN WOODLAND ANIMALS'] (support=119, confidence=0.8415492957746478)

アソシエーションルールマイニング(Java)

import weka.associations.Apriori;
import weka.core.Instances;
import java.io.BufferedReader;
import java.io.FileReader;

public class AssociationRuleMining {
    
    
  public static void main(String[] args) throws Exception {
    
    
    BufferedReader reader = new BufferedReader(new FileReader("transactions.arff"));
    Instances data = new Instances(reader);
    reader.close();

    Apriori model = new Apriori();
    String[] options = {
    
    "-R", "0.5"};
    model.setOptions(options);
    model.buildAssociations(data);
    System.out.println(model);
  }
}

分類子 (Python)

  1. デシジョン ツリー デシジョン ツリー分類子: lib
    を使用してsklearn実装:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练决策树分类器
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)

# 预测测试集
y_pred = clf.predict(X_test)

# 输出分类器性能
print("Accuracy: %f" % clf.score(X_test, y_test))
  1. Naive Bayes NB分類器: lib
    を使用してsklearn実装:
from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练朴素贝叶斯分类器
clf = GaussianNB()
clf.fit(X_train, y_train)

# 预测测试集
y_pred = clf.predict(X_test)

# 输出分类器性能
print("Accuracy: %f" % clf.score(X_test, y_test))
  1. SVM サポート ベクター マシン サポート ベクター マシン分類子: lib
    を使用して実装:sklearn
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练支持向量机分类器
clf = SVC()
clf.fit(X_train, y_train)

# 预测测试集
y_pred = clf.predict(X_test)

# 输出分类器性能
print("Accuracy: %f" % clf.score(X_test, y_test))

回帰分析(Python)

意味

回归分析これは数値データを予測するために使用される統計手法であり、データセット内の変数間の関係を調査できます。

一般的に使用される回帰分析手法

含む:

  • 線形回帰、
  • 多項式回帰、
  • 尾根返し、
  • 投げ縄返しなど。Pythonで回帰分析を行う方法を説明します。
  1. 線形回帰

線形回帰は最も基本的な回帰分析手法であり、独立変数と従属変数の間の線形関係を分析するために使用されます。

scikit-learnライブラリのモデルを使用してLinearRegression線形回帰を実装します。

まず、生徒の成績を予測するためのデータセットを準備します。

import numpy as np

# 生成数据集
np.random.seed(0)
X = np.random.normal(0, 1, size=(100, 1))
y = 2*X[:, 0] + np.random.normal(0, 0.5, size=100)

次に、LinearRegressionモデルを使用してモデルをモデル化し、モデルを近似します。

from sklearn.linear_model import LinearRegression

# 建模
model = LinearRegression()

# 拟合
model.fit(X, y)

モデルが確立されたら、そのモデルを使用して予測を行い、モデルの適合度( R 二乗) を計算できます。

# 预测
y_pred = model.predict(X)

# 计算R-square
r_squared = model.score(X, y)
print('R-square is:', r_squared)
  1. 多項式回帰

多項式回帰は、高次の項 (2 次項、3 次項など) を追加することでデータの非線形関係を適合させる、線形回帰に基づく改良された方法です。

scikit-learnライブラリ内のクラスを使用してPolynomialFeatures高次項特徴を生成し、モデル
を使用してLinearRegressionそれらを近似します。

まず、データセットを準備します。

import numpy as np
import matplotlib.pyplot as plt

# 生成数据集
np.random.seed(0)
X = np.linspace(-1,1,100)
y = np.sin(3*np.pi*X) + np.random.normal(0, 0.1, size=100)

次に、PolynomialFeatureクラスを使用して 2 次項特徴を生成し、LinearRegressionモデルを使用してそれらを近似します。

from sklearn.preprocessing import PolynomialFeatures

# 生成二次项特征
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X.reshape(-1,1))

# 建模
model = LinearRegression()

# 拟合
model.fit(X_poly, y)

モデルが確立されたら、そのモデルを使用して予測を行い、モデルのフィッティング曲線を描くことができます。

# 预测
X_test = np.linspace(-1,1,100)
X_test_poly = poly.fit_transform(X_test.reshape(-1,1))
y_pred = model.predict(X_test_poly)

# 绘制拟合曲线
plt.scatter(X, y, color='b')
plt.plot(X_test, y_pred, color='r')
plt.show()
  1. リッジ回帰

リッジ回帰は線形回帰に基づく正則化手法で、l2 個の正規項を
追加することで特徴係数を減らし、特徴量が多すぎることによる過学習を防ぎます。

scikit-learnライブラリのモデルを使用してRidgeリッジ回帰を実装します。

まず、データセットを準備します。

import numpy as np

# 生成数据集
np.random.seed(0)
X = np.random.normal(0, 1, size=(100, 10))
y = 2*X[:, 0] + 3*X[:, 1] + np.random.normal(0, 0.5, size=100)

次に、Ridgeモデルをモデリングに使用し、モデルをフィッティングします

from sklearn.linear_model import Ridge

# 建模
model = Ridge(alpha=1)

# 拟合
model.fit(X, y)

モデルが確立されたら、そのモデルを使用して予測を行い、モデルの適合度( R 二乗) を計算できます。

# 预测
y_pred = model.predict(X)

# 计算R-square
r_squared = model.score(X, y)
print('R-square is:', r_squared)
  1. なげなわが戻る

ラッソ回帰は線形回帰に基づく正則化手法であり、l1 個の正規項
を追加することで特徴係数を削減し、特徴選択の効果も得ることができます。

scikit-learnライブラリのモデルを使用してLasso、なげなわ回帰を実装します。

まず、データセットを準備します。

import numpy as np

# 生成数据集
np.random.seed(0)
X = np.random.normal(0, 1, size=(100, 10))
y = 2*X[:, 0] + 3*X[:, 1] + np.random.normal(0, 0.5, size=100)

次に、Lassoモデルをモデリングに使用し、モデルをフィッティングします

from sklearn.linear_model import Lasso

# 建模
model = Lasso(alpha=0.1)

# 拟合
model.fit(X, y)

モデルが確立されたら、そのモデルを使用して予測を行い、モデルの適合度( R 二乗) を計算できます。

# 预测
y_pred = model.predict(X)

# 计算R-square
r_squared = model.score(X, y)
print('R-square is:', r_squared)

実際のアプリケーションでは、データの特性に基づいて適切な回帰手法を選択し、モデルのパラメーターを適切に調整してモデルの予測精度を向上させることができます。

おすすめ

転載: blog.csdn.net/weixin_45646640/article/details/129986469