Data Mining_聚类分析分类器关联规则回归分析 (Python)

news/2024/5/20 8:46:51 标签: python, 数据挖掘, 回归, 聚类, 分类

Data mining

一种从大量数据中提取知识的过程,它涉及到统计学、机器学习和人工智能等多个领域。
它通常使用计算机程序来分析数据,发现潜在的关系或规则,并产生有用的信息。

常见技术

包括:

data mining学习平台(网站):

  • KDnuggets:该网站提供与data mining相关的新闻、教育资源和工具等。
  • Journal of Data Mining and Knowledge Discovery:该期刊是data
    mining的领域内的声名独钟的学术刊物之一。
  • Data Mining Techniques:该博客提供有关data mining技术和实践的深入解释和案例研究。

data mining示例代码:

聚类分析 (Python)

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. Apriori算法:用于频繁项集挖掘和关联规则挖掘。可以使用apyori库来实现。

  2. FP-growth算法:与Apriori算法类似,但是更快且更有效。可以使用pyfpgrowth库来实现。

使用Apriori算法实现关联规则挖掘

python">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上的一个电商订单数据集。
  • 数据集中的每个订单都包含一组商品项。
  • 选择提取其中的订单号和商品列表,并将商品列表转换为列表形式。
python">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()函数生成关联规则
python">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. 挖掘结果展示:
    输出生成的关联规则及其置信度支持度
python">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. Print
python">['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. 决策树 Decision Tree分类器:
    使用sklearn lib 实现:
python">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. 朴素贝叶斯 NB分类器:
    使用sklearnlib实现:
python">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 支持向量机 support vector machine分类器:
    使用sklearnlib实现:
python">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))

回归分析 Regression Analysis (Python)

定义

回归分析是一种用于预测数值型数据的统计方法,可以对数据集中的变量之间关系进行研究。

常用回归分析方法

包括:

  1. 线性回归

线性回归是一种最基础的回归分析方法,用于分析自变量和因变量之间的线性关系。

使用scikit-learn库中的LinearRegression模型来实现线性回归

首先,准备数据集来预测学生的成绩:

python">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模型进行建模,并对模型进行拟合。

python">from sklearn.linear_model import LinearRegression

# 建模
model = LinearRegression()

# 拟合
model.fit(X, y)

模型建立完成后,即可使用模型进行预测,并计算模型的拟合优度R-square)。

python"># 预测
y_pred = model.predict(X)

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

多项式回归是一种基于线性回归的改进方法,它通过添加高阶项(例如二次项、三次项等)来拟合数据的非线性关系。

使用scikit-learn库中的PolynomialFeatures类来生成高阶项特征,
然后使用LinearRegression模型进行拟合。

首先,准备数据集:

python">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)

接下来,使用PolynomialFeatures类生成二次项特征,并使用LinearRegression模型进行拟合。

python">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)

模型建立完成后,即可使用模型进行预测,并绘制模型的拟合曲线

python"># 预测
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模型来实现岭回归

首先,准备数据集 :

python">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模型进行建模,并对模型进行拟合

python">from sklearn.linear_model import Ridge

# 建模
model = Ridge(alpha=1)

# 拟合
model.fit(X, y)

模型建立完成后,即可使用模型进行预测,并计算模型的拟合优度R-square)。

python"># 预测
y_pred = model.predict(X)

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

lasso回归是一种基于线性回归的正则化方法,
它通过添加l1正则项来缩小特征系数,同时也可以达到特征选择的效果。

使用scikit-learn库中的Lasso模型来实现lasso回归

首先, 准备数据集 :

python">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模型进行建模,并对模型进行拟合

python">from sklearn.linear_model import Lasso

# 建模
model = Lasso(alpha=0.1)

# 拟合
model.fit(X, y)

模型建立完成后,即可使用模型进行预测,并计算模型的拟合优度R-square)。

python"># 预测
y_pred = model.predict(X)

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

在实际应用中,可以根据数据的特点来选择适合的回归方法,并对模型进行适当的调参,以提高模型的预测准确性。


http://www.niftyadmin.cn/n/214041.html

相关文章

windows创建的bash脚本在IOS无法执行

windows创建的bash脚本在IOS无法执行 从windows发送bash文件到mac电脑上执行,出现以下报错 Bash syntax error: unexpected end of file 首先需要在MAC上安装dos2unix brew install dos2unix 然后在用dos2unix 将bash文件转换成mac支持的文件 dos2unix test.sh …

c++之 类和对象

目录 1.类和对象的基本概念 1.c语言与c中的结构体 2.类的封装性 3.定义类 4.构造与析构 构造与析构的概念: 构造函数 析构函数 拷贝构造函数 c默认增加的函数 1.类和对象的基本概念 1.c语言与c中的结构体 我们知道在c语言里,我们是无法在结构体…

14. unity粒子特效--速度、粒子环绕、力(重力、阻力、风力等)、噪音

1. 渐变速度(Velocity over Time) 可以分别指定x,y,z三个方向的速度,最终的速度是三个方向的速度合成,点击右侧的下拉三角,也可以使用曲线进行速度的控制调节,如下图所示: 2. 粒子环绕 粒子…

一文足够,SpringBoot自动装配底层源码

目录 自动装配原理 开始深入源码 总结自动装配原理 首先明白一个概念,什么是自动装配? 我们在项目中建一个yaml或者properties文件,里面配置一些参数,如redis,在pom中引入启动器,之后就能用redis,自动把…

Vue+springboot+java社区交友居民生活经验分享推荐系统的实现与分析

该系统基于B/S即所谓浏览器/服务器模式,应用Springboot框架,选择MySQL作为后台数据库。系统主要包括首页、个人中心、用户管理、用户分享管理、分享类型管理、交流论坛、 系统管理 用户管理功能 该部分内容提供用户分享管理、我的关注管理等&#xff0c…

【教学类-30-02】10以内加法题不重复(一页两份)(包括6以内、7以内、8以内、9以内、10以内加法题 只抽取25个)

作品样式: 背景需求: 前一篇提到5以内不重复(不超过25题)加法题的word界面布局,做为普测题目打印 【教学类-30-01】5以内加法题不重复(一页两份)包含1以内、2以内、3以内、4以内、5以内加法 …

HTML svg 之<path>使用

<path> 元素用于定义一个路径。 一、命令 下面的命令可用于路径数据&#xff1a; 命令字母示意描述(小写表示相对于上个坐标的位移,相对路径)M(m) x ymoveto移动到(x,y)L(l) x ylineto画一条直线到(x,y)H(h) xhorizontal lineto水平画一条直线到 Xv(v) yvertical linet…

动态代理技术复习

目录什么是动态代理实现动态代理的关键步骤动态代理的优点代码解析什么是动态代理 这个代理就相当于是劳工, 帮我们去做我们能做到, 但是不想做的事情, 比如搬砖…动态代理是面向切面编程的核心思想他是对我们的方法进行代理 实现动态代理的关键步骤 必须要有一个接口, 因为…