👏🏻 你好!欢迎访问「AI免费学习网」,0门教程,教程全部原创,计算机教程大全,全免费!

1 数据挖掘的定义与历史

在互联网和信息技术高速发展的今天,数据成为了一种重要的资产。为了从海量数据中提取有价值的信息和知识,数据挖掘应运而生。本篇将对数据挖掘的定义和历史进行概述,为后续的应用领域展开铺垫。

数据挖掘的定义

数据挖掘(Data Mining)是指通过各种技术手段从大量数据中提取出潜在的、以前未知的和有用的信息的过程。它结合了统计学、机器学习、数据库技术以及模式识别等多个领域的方法。

关键特性

  • 自动化:数据挖掘能够自动从数据中提取知识,而不是依赖人工分析。
  • 发现模式:通过算法,数据挖掘能够识别出数据中的隐藏模式和联系。
  • 帮助决策:获得的知识可以帮助决策者做出更科学、合理的决策。

相关技术

数据挖掘的技术包括但不限于:

  • 分类:根据特征将数据分为不同类别,例如应用于信用评分。
  • 聚类:将相似的数据对象归为一类,常用于市场细分。
  • 关联规则学习:揭示变量间的关系,比如“购物篮分析”中经常一起购买的商品。

案例

购物篮分析为例,数据挖掘可以帮助零售商发现用户的购买习惯。例如,分析数据后发现“如果顾客购买了面包,那么他们90%的概率也会购买黄油”。这可以支持商家进行促销策略或优化库存管理。

数据挖掘的历史

数据挖掘的历史可以追溯到20世纪60年代和70年代,当时的研究重点主要集中在数据库的设计和数据管理上。随着数据量的迅猛增长,研究者开始关注如何从这些数据中提取出有价值的知识。

发展阶段

  1. 早期阶段(1960s-1970s):主要是数据库技术和数据管理的发展,提出了基本的数据处理概念。

  2. 知识发现阶段(1980s):计算机科学与人工智能的结合推动了对数据中知识提取的关注。这个时期,研究者开始探索从数据库中自动化提取知识的方法。

  3. 商业化阶段(1990s):随着计算能力的提高和数据量的增加,数据挖掘技术开始被广泛应用于商业领域。企业利用数据挖掘进行市场分析、客户关系管理等。

  4. 成熟阶段(2000s至今):数据挖掘技术不断完善,算法也日益复杂化,机器学习和深度学习的结合推动了数据挖掘的新发展。此时,数据挖掘不仅在商业领域取得了成功,还在医学、金融等多个行业得到了应用。

里程碑

  • 1996年,《数据挖掘概念与技术》一书的出版标志着数据挖掘成为一个独立研究领域。
  • 2001年,国际数据挖掘大会(KDD,Knowledge Discovery and Data Mining)首次召开,促进了学术界和工业界的交流与合作。

总结

数据挖掘作为一门跨学科的技术,随着技术的发展和应用需求的增加,逐渐形成了独特的研究领域。它不仅为商业决策提供了支持,也为其他领域带来了深刻的变革。在下一篇中,我们将探讨数据挖掘的应用领域,了解它在不同场景中的具体运用价值。

分享转发

2 数据挖掘概述之数据挖掘的应用领域

在上一篇文章中,我们探讨了数据挖掘的定义与历史,了解了这一领域的发展脉络与核心概念。接下来,我们将深入探讨数据挖掘的应用领域,揭示数据挖掘在实际生活中的重要角色及其广泛应用。

数据挖掘的广泛应用

数据挖掘不仅刺激了学术研究,还在众多行业中发挥了巨大的作用。以下是一些主要的应用领域:

1. 市场营销

在市场营销中,数据挖掘用于分析客户行为,进行市场趋势预测。通过对客户购买历史和行为模式的分析,企业可以实现精准营销,优化广告投放。例如,某电商平台利用数据挖掘分析用户的浏览和购买记录,发现某产品在年轻女性中销量更好,并据此调整营销策略。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
from sklearn.cluster import KMeans

# 假设我们有用户数据
data = pd.DataFrame({
'User_ID': [1, 2, 3, 4, 5],
'Age': [23, 45, 31, 35, 40],
'Purchase_Amount': [150, 200, 300, 400, 500]
})

# 使用 KMeans 进行用户分群
kmeans = KMeans(n_clusters=2)
data['Group'] = kmeans.fit_predict(data[['Age', 'Purchase_Amount']])
print(data)

2. 金融服务

在金融行业,数据挖掘用于信用评分、欺诈检测以及风险管理等场景。例如,银行可以通过分析客户的交易行为,建立模型来评估某位客户的信用风险,从而决定是否批准贷款申请。

1
2
3
4
5
6
7
8
9
10
import numpy as np
from sklearn.ensemble import RandomForestClassifier

# 假设我们有客户相关的数据
X = np.array([[1, 0, 5000], [0, 1, 8000], [1, 1, 15000], [0, 0, 20000]]) # 特征可能是年龄、收入等
y = np.array([0, 1, 1, 0]) # 0 为低风险,1 为高风险

rf = RandomForestClassifier()
rf.fit(X, y)
print(rf.predict([[1, 0, 10000]])) # 为新客户预测风险

3. 医疗健康

在医疗领域,数据挖掘帮助医生分析患者的数据,寻找疾病的早期指征和治疗效果。比如,通过分析大量医学记录,数据挖掘可以帮助识别潜在的疾病模式,甚至是药物的副作用。

4. 社交网络

社交网络利用数据挖掘分析用户的互动模式,以推荐内容和广告。通过分析用户的点赞、分享和评论行为,平台能够优化用户体验并提高用户粘性。

5. 制造业

在制造业中,数据挖掘用于提升生产效率和质量控制。通过对生产线数据的实时分析,企业可以识别设备故障,并在出现问题之前采取措施,从而降低停机时间和生产成本。

6. 政府与公共安全

政府部门通过数据挖掘分析犯罪数据,帮助打击犯罪活动。例如,通过分析历史犯罪记录,预测高风险地区,从而增强警力部署和资源的合理利用。

小结

数据挖掘的应用无处不在,充分体现了它在各行各业中的重要性。通过对数据的深入挖掘和分析,组织和企业能够从中获得有价值的见解,驱动决策和优化其运营。

在接下来的文章中,我们将探讨数据挖掘的具体流程,以及如何将理论转化为实践。希望您继续关注我们的数据挖掘小白教程系列,一起深入这个充满潜力的领域。

分享转发

3 数据挖掘概述之数据挖掘的流程

在我们深入探讨数据挖掘的流程之前,回顾一下数据挖掘的应用领域是非常必要的。数据挖掘可以帮助我们从大量数据中提取出有价值的信息,广泛应用于金融、医疗、市场营销、电子商务等多个行业。随着数据量的迅速增长,掌握数据挖掘的流程成为了数据科学工作者的重要技能之一。

数据挖掘的概念

数据挖掘是指从大量数据中,通过各种算法和工具,提取出潜在的、有用的信息和知识的过程。这个过程通常涵盖多个阶段,以保证有效性和准确性。在本篇文章中,我们将详细探讨数据挖掘的流程,帮助小白读者理清思路。

数据挖掘的流程

数据挖掘的流程通常可以分为以下几个关键步骤:

  1. 定义目标
  2. 数据收集
  3. 数据预处理
  4. 数据挖掘
  5. 结果评估
  6. 知识表示

接下来,让我们逐步详细讨论每个步骤。

1. 定义目标

在开始数据挖掘之前,首要任务是明确数据挖掘的目的。定义目标包括确定要解决的问题和期望的结果。例如,如果一家电子商务公司希望提高客户的购买转化率,那么可以设定目标为通过分析过去的购买行为来建立推荐系统。

2. 数据收集

数据挖掘的下一步是收集相关的数据。这些数据可以来自不同的来源,包括:

  • 数据库:如关系型数据库(MySQL、PostgreSQL)、非关系型数据库(MongoDB、Cassandra等)。
  • 线上数据:从社交媒体平台、网站抓取的数据。
  • 传感器数据:如IoT设备生成的数据。

在收集数据时,需要确保数据的可用性和相关性,避免选择不相关的数据造成后续流程的复杂性。

3. 数据预处理

数据预处理是数据挖掘周期中非常重要的一步,但在这里我们仅作初步介绍,后续会详细探讨此环节。数据预处理的过程中,最常见的操作包括:

  • 数据清洗:去除重复数据、填补缺失值、处理异常值等。
  • 数据变换:标准化、归一化、数据编码等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 示例:使用Pandas进行数据清洗
import pandas as pd

# 读取数据
data = pd.read_csv('data.csv')

# 查看缺失值
print(data.isnull().sum())

# 填补缺失值
data.fillna(method='ffill', inplace=True)

# 去除重复数据
data.drop_duplicates(inplace=True)

4. 数据挖掘

数据挖掘阶段是整个流程的核心,包括应用各种算法来分析数据。常用的数据挖掘方法包括:

  • 分类:将数据分入不同的类别(例如,使用决策树、随机森林)。
  • 聚类:将相似的数据归为一组(例如,K均值聚类)。
  • 关联规则挖掘:发现数据之间的关系(例如,购物篮分析)。

下面是一个使用K均值聚类的简单示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.cluster import KMeans
import numpy as np

# 假设我们有数据点
data_points = np.array([[1, 2], [1, 4], [1, 0],
[4, 2], [4, 4], [4, 0]])

# 创建K均值模型
kmeans = KMeans(n_clusters=2)
kmeans.fit(data_points)

# 输出聚类结果
print(kmeans.labels_)

5. 结果评估

在完成数据挖掘后,需要对挖掘结果进行评估,以判断是否达到了预期的目标。这一步骤可能涉及:

  • 准确率、召回率等评价指标:用于分类模型的有效性评估。
  • 轮廓系数、汇聚度等指标:用于聚类模型的效果评估。

通过这些指标的计算和分析,能够辅助我们判断模型的性能并优化模型。

6. 知识表示

最后,将挖掘出的知识以易于理解的方式呈现给用户。常用的表现手法包括图表、报告和仪表盘等。这一步非常重要,因为它能够将复杂的数据分析结果以简单明了的方式传达给业务决策者,促进决策过程。

总结

数据挖掘是一个系统化的过程,从定义目标到知识表示,每一步都对最终的成果至关重要。随着我们对各个步骤的深入理解,下一篇文章将详细探讨数据预处理中的重要环节——数据清洗。数据挖掘的成功与否,往往取决于如何处理和准备数据,期待你在后续的学习中继续探索!

分享转发

4 数据挖掘中的重要一步

在数据挖掘的过程中,数据预处理是一个至关重要的环节,包含多个步骤以确保数据质量。在上一篇我们讨论了数据挖掘的总体流程,强调了数据预处理在整个过程中不可或缺的地位。今天,我们将深入探讨数据预处理中的一个关键组成部分——数据清洗

什么是数据清洗?

数据清洗是对原始数据进行处理的过程,以消除或修正错误数据、重复数据和不一致数据,使得数据更加整洁和可靠。理想情况下,数据清洗的目标是提高数据的整体质量,从而为后续分析和挖掘提供一个良好的基础。

数据清洗的步骤

  1. 识别和处理缺失值
  2. 去除重复数据
  3. 修正异常值
  4. 一致性处理
  5. 格式化数据

1. 识别和处理缺失值

缺失值是数据清洗中最常遇到的问题之一。它们可能由于各种原因产生,比如在数据收集过程中未能获得所有信息。处理缺失值的常用方法有:

  • 删除缺失值:最简单直接,但可能会丢失重要信息。

    1
    2
    3
    4
    import pandas as pd

    df = pd.read_csv('data.csv')
    df_cleaned = df.dropna() # 删除缺失值
  • 填充缺失值:使用均值、中位数、众数或其他策略填充。

    1
    df['column_name'].fillna(df['column_name'].mean(), inplace=True)  # 用均值填充

2. 去除重复数据

在数据集中,重复的数据不仅浪费存储空间,还会影响模型的准确性。我们可以通过以下方式去除重复数据:

1
df_cleaned = df.drop_duplicates()  # 删除重复行

通过使用drop_duplicates()函数,我们可以轻松清理数据集中的冗余信息。

3. 修正异常值

异常值是指在数据集中明显偏离其他数据的数值。它们可能是数据错误或真实的极端情况。处理异常值的方法包括:

  • 识别并删除异常值:通常可以使用统计方法,如Z-score或IQR(四分位距)。

    1
    2
    3
    from scipy import stats

    df_cleaned = df[(np.abs(stats.zscore(df['column_name'])) < 3)]

在这个例子中,我们通过Z-score将绝对值大于3的异常值去除。

4. 一致性处理

在数据集中,数据可能会因为格式不一致而导致分析困难。例如,在一个字段中,日期的格式可能有多种表示方法。我们需要将它们统一为一种格式。

1
df['date_column'] = pd.to_datetime(df['date_column'])  # 统一日期格式

5. 格式化数据

最后,确保所有数据都是合适的格式。例如,将所有类别变量转换为category类型,以提高效率。

1
df['category_column'] = df['category_column'].astype('category')

实际案例:数据清洗实施

假设我们有一个包含客户信息的数据集customers.csv,数据集的部分内容如下:

ID 名字 年龄 电话号码 地址
1 张三 25 12345678 北京市朝阳区
2 李四 NaN 87654321 上海市浦东新区
3 王五 30 12345678 NaN
3 王五 30 12345678 NaN
4 赵六 100 NaN 广州市天河区

步骤概述如下:

  1. 识别与处理缺失值:用年龄的均值填充缺失值。
  2. 去除重复数据:删除ID为3的重复行。
  3. 修正异常值:将年龄大于99的记录视为异常,删除。
  4. 一致性处理:确保电话号码字段格式一致。
  5. 格式化数据:将名字转换为字符串格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
import numpy as np

# 读取数据
df = pd.read_csv('customers.csv')

# 1. 填充缺失值
mean_age = df['年龄'].mean()
df['年龄'].fillna(mean_age, inplace=True)

# 2. 删除重复数据
df.drop_duplicates(subset=['ID'], inplace=True)

# 3. 删除异常值
df = df[df['年龄'] < 99]

# 4. 格式化电话号码
df['电话号码'] = df['电话号码'].astype(str)

# 最后查看清洗后的数据
print(df)

通过以上代码和步骤,我们可以显著提高数据集的质量,为后续的数据挖掘和分析做好准备。

总结

在数据挖掘过程中,数据清洗是确保分析结果可靠性的重要步骤。通过移除缺失值、重复数据、异常值以及进行一致性处理,我们能够提高数据质量,为后续的分析打下坚实的基础。在下一篇文章中,我们将进一步讨论缺失值的具体处理方式,为读者提供更多方案和技巧。

想了解更多吗?让我们在下一篇中一起深入缺失值处理的细节!

分享转发

5 数据预处理之缺失值处理

在数据挖掘的过程中,数据预处理是至关重要的一步。上一篇中我们讨论了“数据清洗”,了解了如何识别和删除无用或错误的数据。在这一篇中,我们将重点关注“缺失值处理”,这是数据预处理中的一项重要任务,因为缺失值可能影响模型的性能和结果的准确性。我们会通过案例和代码示例来探讨缺失值的识别、处理方法以及如何选择合适的策略。

缺失值的识别

数据集中缺失值的存在会对分析和模型建立造成影响,因此,首先要识别出缺失值。常见的识别方法有:

  1. 缺失值矩阵:使用可视化工具来观察缺失情况。
  2. 统计函数:通过统计函数来查看每列缺失值的数量。

示例代码(使用Python中的Pandas)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 创建一个示例数据集
data = {
'姓名': ['张三', '李四', '王五', None, '赵六'],
'年龄': [28, None, 22, 23, None],
'性别': ['男', '女', '男', '女', None]
}
df = pd.DataFrame(data)

# 查看缺失值信息
print(df.isnull().sum())

# 可视化缺失值
sns.heatmap(df.isnull(), cbar=False, cmap='viridis')
plt.title('缺失值热图')
plt.show()

在上面的示例中,我们创建了一个包含缺失值的简单数据集,并使用 isnull() 方法统计每列的缺失值数量,同时用热图可视化缺失值的分布情况。

缺失值处理的方法

处理缺失值有多种方法,选择合适的方法取决于缺失值的类型、数量和数据的特点。以下是一些常用的方法:

1. 删除缺失值

对于缺失值数量较少的情况,可以直接删除它们,以避免对分析结果的影响。可以选择删除整行或整列。

1
2
3
# 删除包含缺失值的行
df_cleaned = df.dropna()
print(df_cleaned)

2. 填充缺失值

另一种常见的方法是用特定的值填充缺失值。可以使用均值、中位数、众数等统计量填充,也可以使用更复杂的方法。

示例:用均值填充缺失值

1
2
3
4
# 用年龄列的均值填充缺失值
mean_age = df['年龄'].mean()
df['年龄'].fillna(mean_age, inplace=True)
print(df)

除了均值填充,还可以使用以下方法来填充缺失值:

  • 前向填充:用前一个有效值填充。
  • 后向填充:用后一个有效值填充。
  • 插值法:使用插值方法生成新值。

3. 使用模型预测填充

如果缺失值较多,简单的填充方法可能会影响模型性能,可以使用机器学习模型预测缺失值,基于其他特征来估算缺失值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from sklearn.ensemble import RandomForestRegressor

# 假设性地我们使用年龄和性别来预测缺失的年龄
train_data = df[df['年龄'].notnull()]
test_data = df[df['年龄'].isnull()]

# 将类别变量转为数值变量
train_data['性别'] = train_data['性别'].map({'男': 0, '女': 1})
test_data['性别'] = test_data['性别'].map({'男': 0, '女': 1})

# 训练模型
X_train = train_data[['性别']]
y_train = train_data['年龄']
model = RandomForestRegressor()
model.fit(X_train, y_train)

# 预测
X_test = test_data[['性别']]
predicted_ages = model.predict(X_test)
df.loc[df['年龄'].isnull(), '年龄'] = predicted_ages

print(df)

在这个示例中,我们使用 RandomForestRegressor 来基于性别预测缺失的年龄。

4. 留下缺失值

在某些情况下,缺失值可能包含有价值的信息,例如,在病历数据中,缺失某些症状的描述可能表示这些症状并不存在,这种情况下可以选择保留缺失值。

总结

在处理缺失值时,务必考虑数据的性质和业务场景。合理的方法可以帮助我们有效地提高数据质量,为后续的数据转换与归一化做好准备。在下一篇中,我们将深入探讨“数据转换与归一化”,学习如何处理不同尺度的数据,使之适合用于建模。

通过快速识别和合理处理缺失值,我们不仅能使数据集更完整,还能提升机器学习模型的性能。希望这篇关于缺失值处理的教程能够为您的数据挖掘之旅提供帮助。

分享转发

6 数据预处理之数据转换与归一化

在数据挖掘的过程中,数据预处理是一个不可或缺的环节。我们在上一篇中讨论了如何处理缺失值,确保数据集中每一个样本都有尽可能完整的信息。这一部分将重点介绍数据预处理中的一个重要方面——数据转换与归一化。我们会探讨这些步骤如何帮助提高后续建模的效果,并结合实例和代码更好地理解这些概念。

数据转换

数据转换是指对数据进行某种形式的变换,以便使其更加适合于模型的训练或分析。常见的转换操作包括:

  1. 对数变换:通常用于处理右偏分布的数值特征,能够减小极端值的影响。

    例如,考虑某企业的收入数据,其分布可能高度右偏。这时,我们可以使用对数变换:

    $$ X’ = \log(X + 1) $$

    这里的 ‘+1’ 是为了避免对数零不能计算的问题。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import pandas as pd
    import numpy as np

    # 创建数据框
    df = pd.DataFrame({'收入': [5000, 10000, 150000, 2000000]})

    # 进行对数变换
    df['收入_log'] = np.log(df['收入'] + 1)
    print(df)
  2. 平方根变换:另一种常见的处理偏态数据的方法,尤其对于数据都为正的情况。

    $$ X’ = \sqrt{X} $$

  3. 标准化:标准化是对特征进行线性变换,使其均值为 0,方差为 1,这一过程使得不同尺度的特征可以比较。

    $$ X’ = \frac{X - \mu}{\sigma} $$

    其中 $\mu$ 是特征的均值,$\sigma$ 是特征的标准差。

    1
    2
    3
    4
    5
    6
    7
    from sklearn.preprocessing import StandardScaler

    # 示例数据
    data = np.array([[1, 2], [2, 3], [3, 4]])
    scaler = StandardScaler()
    standardized_data = scaler.fit_transform(data)
    print(standardized_data)

归一化

与标准化相似,归一化是另一种常用的数据预处理技术,特别适用于在一个固定范围内缩放特征。归一化的常见方法是 Min-Max 归一化,它将特征缩放到 [0, 1] 区间。

$$ X’ = \frac{X - X_{min}}{X_{max} - X_{min}} $$

这种方式尤其适用于需要保持原特征分布形态的情况,并且在使用一些基于距离的算法(如 KNN、SVM 等)时,归一化会显著提高模型的表现。

1
2
3
4
5
6
7
from sklearn.preprocessing import MinMaxScaler

# 示例数据
data = np.array([[1, 2], [2, 3], [3, 4]])
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
print(normalized_data)

实际案例

假设我们在开展客户离职预测的项目,在数据集中我们有多种特征,例如客户的年龄、年收入、账户余额等。这些特征的取值范围与数据分布差异较大,直接投入模型可能导致模型的性能不佳。因此,适当地进行数据转换与归一化是非常必要的。

  1. 数据转换:我们首先对年收入进行对数变换,以便减小其与其它特征的差异。
  2. 数据归一化:我们使用 Min-Max 归一化对年龄和账户余额进行处理,这样做能够保证每个特征的数值范围更为一致。

下面是一个完整的数据预处理示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler

# 创建客户数据集
data = pd.DataFrame({
'客户ID': [1, 2, 3, 4],
'年龄': [25, 45, 35, 23],
'年收入': [5000, 10000, 150000, 2000000],
'账户余额': [100, 1500, 3000, 50000]
})

# 年收入对数变换
data['年收入_log'] = np.log(data['年收入'] + 1)

# 对年龄和账户余额进行 Min-Max 归一化
scaler = MinMaxScaler()
data[['年龄', '账户余额']] = scaler.fit_transform(data[['年龄', '账户余额']])

print(data)

小结

在这部分中,我们详细介绍了数据转换与归一化的概念以及常用的方法。通过对数据进行适当的变换与缩放,能够让后续的模型训练更加高效,提高数据的可预测性,同时也能够减少不同特征之间的干扰。在数据处理完成后,我们可以进入下一步,进行探索性数据分析的描述性分析,以深入理解数据的特征与趋势,为模型选择提供支持。

接下来,我们将探讨探索性数据分析之描述性分析的内容。

分享转发

7 探索性数据分析之描述性分析

在数据挖掘的过程中,进行有效的数据预处理是至关重要的。正如我们在上一篇中讨论的“数据预处理之数据转换与归一化”部分,我们已经对原始数据进行了清洗和标准化,为接下来的分析奠定了基础。本篇将深入探讨探索性数据分析(Exploratory Data Analysis, EDA)中的描述性分析,这一步骤将帮助我们快速理解数据的基本特征和分布规律。

描述性分析的概念

描述性分析是对数据进行初步总结的过程,通过各种统计指标和图形展示数据的主要特征,帮助我们了解数据的分布、中心趋势和变异程度。常见的描述性统计量包括:

  • 均值(Mean):所有数据点的平均值。
  • 中位数(Median):将数据排序后位于中间位置的值。
  • 众数(Mode):数据中出现频率最高的值。
  • 标准差(Standard Deviation):衡量数据分布的离散程度。
  • 范围(Range):数据的最大值与最小值之间的差。

描述性分析步骤

1. 数据导入

假设我们在进行一次房价分析的数据集,我们将使用 pandas 库来加载我们的数据集。以下是数据导入的代码示例:

1
2
3
4
5
6
7
import pandas as pd

# 使用 pandas 读取 CSV 文件
data = pd.read_csv('house_prices.csv')

# 显示数据的前五行
print(data.head())

2. 基本统计量计算

我们可以利用 pandas 提供的 .describe() 方法来快速获取数据集的基本统计信息。我们关注的特征包括房价中值、均值以及标准差等。

1
2
3
4
# 显示数据集中数值型特征的描述性统计信息
descriptive_stats = data.describe()

print(descriptive_stats)

示例输出:

1
2
3
4
5
6
7
8
9
          price       size      bedrooms   bathrooms
count 1000.000000 1000.000000 1000.000000 1000.000000
mean 300000.000000 1500.000000 3.000000 2.000000
std 150000.000000 500.000000 1.000000 0.500000
min 100000.000000 800.000000 1.000000 1.000000
25% 200000.000000 1200.000000 2.000000 1.500000
50% 290000.000000 1500.000000 3.000000 2.000000
75% 400000.000000 1800.000000 4.000000 2.500000
max 700000.000000 3000.000000 6.000000 4.000000

3. 数据分布检查

为了更好地理解数据的分布情况,可以使用 pandasmatplotlib 提供的方法绘制 直方图箱线图。这些图形可以帮助我们可视化数据的分布情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt

# 直方图
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.hist(data['price'], bins=30, color='skyblue', edgecolor='black')
plt.title('房价分布')
plt.xlabel('价格(元)')
plt.ylabel('频数')

# 箱线图
plt.subplot(1, 2, 2)
plt.boxplot(data['price'], vert=False)
plt.title('房价箱线图')
plt.xlabel('价格(元)')

plt.tight_layout()
plt.show()

4. 相关性分析

描述性分析中,了解特征之间的相关性同样重要。可以使用 .corr() 方法来计算特征之间的相关系数:

1
2
3
4
5
6
7
8
9
10
11
12
# 计算相关性矩阵
correlation = data.corr()

print(correlation)

# 可视化相关性矩阵
import seaborn as sns

plt.figure(figsize=(8, 6))
sns.heatmap(correlation, annot=True, fmt=".2f", cmap='coolwarm', cbar=True)
plt.title('特征之间的相关性')
plt.show()

通过上述的描述性统计和可视化,我们能够快速、直观地获取数据的基础信息与特征,为下一步的数据理解和可视化技术准备。

总结

在本篇中,我们介绍了描述性分析的基本概念与操作方法,包括如何利用统计量快速评估数据特征,以及如何通过图形法查看数据的分布情况。这些分析将为我们后续的可视化技术打下坚实的基础。在下一篇中,我们将进一步探索如何使用各种可视化工具来展示和理解数据的深层规律。

通过对描述性分析的学习,相信你已对数据有了初步的理解。接下来,让我们在可视化技术的世界中进一步探寻数据的秘密。

分享转发

8 探索性数据分析之可视化技术

在前一篇中,我们讨论了探索性数据分析中的描述性分析,确定了数据集的基本特征和分布情况。在本篇中,我们将进一步探讨可视化技术,这是探索性数据分析中至关重要的组成部分。通过可视化,我们能够直观地理解数据,发掘潜在的模式和异常,从而为后续的分析打下坚实的基础。

可视化的目的

可视化的主要目的是通过图形化方式将数据呈现出来,以便于快速理解数据的分布、趋势、关系等特征。以下是一些常见的可视化目的:

  • 理解分布:识别数据集中各变量的分布特征。
  • 发现关系:探讨不同变量之间的潜在关系或相关性。
  • 识别异常:发现偏离正常范围的异常值。
  • 总结信息:通过整合数据信息传达给受众。

常见可视化技术

1. 直方图

直方图是一种用于展示数值型变量分布的图形。它通过将数据划分为多个区间(或称桶),并计算每个区间内数据点的数量来表示数值的分布情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

# 示例数据
data = pd.DataFrame({
'年龄': [22, 25, 29, 30, 31, 34, 28, 25, 29, 35, 40, 45, 30, 22, 37]
})

plt.figure(figsize=(10, 6))
sns.histplot(data['年龄'], bins=5, kde=True)
plt.title('年龄直方图')
plt.xlabel('年龄')
plt.ylabel('频数')
plt.show()

在这个示例中,我们使用seaborn库创建了年龄的直方图,包含了KDE(核密度估计)曲线,帮助我们更好地理解年龄的分布情况。

2. 箱线图

箱线图(Box Plot)用于显示数值型数据的分布情况,包括四分位数、最大值、最小值以及异常值。它能够有效地比较不同组数据的分布。

1
2
3
4
5
6
7
8
9
10
11
12
# 示例数据
data = pd.DataFrame({
'组别': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'成绩': [85, 87, 90, 75, 91, 88, 92, 84]
})

plt.figure(figsize=(10, 6))
sns.boxplot(x='组别', y='成绩', data=data)
plt.title('成绩箱线图')
plt.xlabel('组别')
plt.ylabel('成绩')
plt.show()

在这个例子中,我们比较了两个组别(A组和B组)的成绩分布情况,通过箱线图可以很清晰地看到两组的中位数及异常值。

3. 散点图

散点图是用于显示两个数值型变量之间关系的工具。通过在二维坐标系中绘制数据点,可以直观地查看它们之间的关系。

1
2
3
4
5
6
7
8
9
10
11
12
# 示例数据
data = pd.DataFrame({
'身高': [160, 165, 170, 175, 180, 185],
'体重': [50, 65, 70, 75, 80, 85]
})

plt.figure(figsize=(10, 6))
sns.scatterplot(x='身高', y='体重', data=data)
plt.title('身高与体重散点图')
plt.xlabel('身高 (cm)')
plt.ylabel('体重 (kg)')
plt.show()

在这个例子中,散点图能够帮助我们判断身高体重之间的关系,是否存在正相关的趋势。

4. 热力图

热力图用于展示变量之间的相关性,通常用于可视化相关系数矩阵。通过颜色深浅,能够直观地评估各变量之间的相关程度。

1
2
3
4
5
6
7
8
9
10
11
# 示例数据
import numpy as np

# 随机生成一些数据
data = pd.DataFrame(np.random.rand(10, 10), columns=[f'特征{i}' for i in range(10)])

plt.figure(figsize=(10, 8))
correlation_matrix = data.corr()
sns.heatmap(correlation_matrix, annot=True, fmt=".2f", cmap='coolwarm')
plt.title('特征相关性热力图')
plt.show()

该示例中我们随机生成了10个特征数据,使用热力图可视化它们之间的相关性,从而便于识别哪些特征是强相关的。

总结

在探索性数据分析中,可视化技术是不可或缺的工具,它使得数据的洞察变得直观和易于理解。在选择合适的可视化方法时,我们需要考虑数据的性质和分析的目标。在接下来的篇章中,我们将深入探讨统计分析方法,以便于对数据进行更深入的解读和分析。通过结合描述性分析、可视化技术和统计分析方法,我们将可以全面地理解和利用数据。

分享转发

9 探索性数据分析之统计分析方法

在上一节中,我们讨论了探索性数据分析(EDA)中的可视化技术,强调了数据图表在理解数据特征和分布方面的重要性。本节将深入探讨用于数据分析的统计分析方法,帮助初学者更好地理解和分析数据特征,为后续的数据挖掘技术奠定基础。

统计分析方法概述

统计分析是一种利用数据和统计学理论来理解数据的过程。它的核心不仅在于确认数据的中心趋势,还包括对数据的分布、变异性及其潜在关系的分析。主要的统计分析方法可以分为以下几类:

  1. 描述性统计(Descriptive Statistics)
  2. 推断性统计(Inferential Statistics)
  3. 相关性分析(Correlation Analysis)
  4. 假设检验(Hypothesis Testing)

描述性统计

描述性统计主要用来总结和描述数据集的基本特征。这些特征通常通过几个关键指标来展示:

  • 集中趋势:包括均值(mean)、中位数(median)、众数(mode)等。
  • 离散程度:包括方差(variance)、标准差(standard deviation)、范围(range)等。

案例:人口统计数据

考虑以下关于某地区居民收入的数据集:

收入(万元)
30
45
25
50
60

我们可以计算这些收入的描述性统计信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
import pandas as pd

# 创建数据框
data = pd.DataFrame({'收入': [30, 45, 25, 50, 60]})

# 计算描述性统计
mean_income = data['收入'].mean()
median_income = data['收入'].median()
mode_income = data['收入'].mode()[0]
std_income = data['收入'].std()

print(f"均值:{mean_income}, 中位数:{median_income}, 众数:{mode_income}, 标准差:{std_income}")

输出结果:

1
均值:42.0, 中位数:45.0, 众数:30, 标准差:14.142135623730951

推断性统计

推断性统计的方法用于从样本数据中推断总体特征。这通常涉及到置信区间和假设检验。

  1. 置信区间(Confidence Interval):它提供了一个范围,认为总体参数将落入该范围内。

  2. 假设检验(Hypothesis Testing):常见的检验方法包括t检验和方差分析(ANOVA),用于比较两个或多个样本均值。

案例:药物效果的实验

假设我们进行了一项药物的效果实验,我们有两个组的患者数据,分别接受了药物和安慰剂。

1
2
3
4
5
6
7
8
9
10
import scipy.stats as stats

# 药物组和安慰剂组的数据
drug_group = [30, 32, 29, 35, 31]
placebo_group = [28, 27, 30, 26, 29]

# 执行t检验
t_stat, p_value = stats.ttest_ind(drug_group, placebo_group)

print(f"t统计量:{t_stat}, p值:{p_value}")

输出可能为:

1
t统计量:2.304, p值:0.036

在这例中,如果 p 值小于0.05,我们可以拒绝原假设,认为药物组的效果显著优于安慰剂组。

相关性分析

相关性分析用于衡量两个变量之间的关系强度。最常用的指标是皮尔逊相关系数(Pearson Correlation Coefficient)。

  • 相关系数的值范围为 -1 到 +1,其中 +1 表示完全正相关,-1 表示完全负相关,0 表示无相关。

案例:身高与体重的相关性

例如,我们研究身高与体重之间的关系,通过计算相关系数来确定它们是否相关。

1
2
3
4
5
6
7
# 身高和体重的数据
heights = [160, 165, 170, 175, 180]
weights = [55, 60, 65, 70, 75]

# 计算相关系数
correlation = np.corrcoef(heights, weights)[0, 1]
print(f"身高与体重的相关系数:{correlation}")

输出可能为:

1
身高与体重的相关系数:0.981

这表明身高与体重之间存在很强的正相关关系。

假设检验

假设检验是统计分析中重要的组成部分。我们可以使用p值来决定是否拒绝原假设(通常是“无效”假设)。

  • 原假设(Null Hypothesis, $H_0$):假定没有差异或效果。
  • 备择假设(Alternative Hypothesis, $H_1$):假定存在差异或效果。

通过适当的检验,例如t检验、卡方检验等,可以对原假设进行验证。

小结

在本节中,我们讨论了几种关键的统计分析方法,包括描述性统计、推断性统计、相关性分析和假设检验。通过具体案例和代码示例,我们能够更好地理解这些方法的应用。掌握这些统计分析工具对于深入数据挖掘和进一步的分析是至关重要的。

在下一节中,我们将继续探讨数据挖掘技术中的分类方法,这将帮助我们利用对当前数据的理解进行预测和决策。

分享转发

10 数据挖掘技术之分类

在数据挖掘的学习过程中,分类是一项非常重要的技术。这一技术通常用于从已有的样本数据中学习并标记新数据,帮助我们将数据分为不同的类别。首先,回顾一下我们在上一篇中讨论的探索性数据分析之统计分析方法,我们了解到,通过统计方法可以从数据中提取出有意义的信息,而这些信息是我们进行分类的基础。

什么是分类?

分类(Classification)是一种监督学习的方法,其目的是根据输入特征将数据点分配到预定义的类别中。分类技术广泛应用于许多领域,例如金融欺诈检测、电子邮件分类、客户细分等。分类模型能够学习输入数据的特征与类别标签之间的关系,并利用这种关系对新的、未标记的数据进行分类。

分类的基本步骤

  1. 数据准备:首先,收集和准备具有标签的数据集,数据集应包括与特定任务相关的特征(自变量)和类别标签(因变量)。
  2. 特征选择和工程:从原始数据中选择重要特征,并进行必要的转换或处理,以提高分类性能。
  3. 构建分类模型:选择合适的分类算法,如决策树、支持向量机、随机森林或神经网络,构建深度学习模型等。
  4. 训练模型:使用训练数据对模型进行训练,让模型学习特征与标签之间的关系。
  5. 模型评估:利用测试数据对模型进行评估,通常使用准确率、精确率、召回率和F1-score等指标。
  6. 模型应用:将训练好的模型应用于新的数据集进行预测。

常用的分类算法

接下来,我们来介绍几个常用的分类算法,并结合代码示例。

1. 决策树

决策树是一种树状图形结构的模型,利用特征的条件来做出决策。它通过分裂节点来选择最优特征,从而实现分类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

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

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

# 构建决策树模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)

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

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"决策树模型的准确率为: {accuracy:.2f}")

2. 支持向量机(SVM)

支持向量机是一种非常强大的分类算法,尤其当数据集的维度比较高时。

1
2
3
4
5
6
7
8
9
10
11
12
from sklearn.svm import SVC

# 构建支持向量机模型
svm_model = SVC(kernel='linear')
svm_model.fit(X_train, y_train)

# 进行预测
svm_pred = svm_model.predict(X_test)

# 评估模型
svm_accuracy = accuracy_score(y_test, svm_pred)
print(f"SVM模型的准确率为: {svm_accuracy:.2f}")

3. 随机森林

随机森林是一种集成学习方法,它通过构建多个决策树来进行分类,并对这些树的预测结果进行投票。

1
2
3
4
5
6
7
8
9
10
11
12
from sklearn.ensemble import RandomForestClassifier

# 构建随机森林模型
rf_model = RandomForestClassifier()
rf_model.fit(X_train, y_train)

# 进行预测
rf_pred = rf_model.predict(X_test)

# 评估模型
rf_accuracy = accuracy_score(y_test, rf_pred)
print(f"随机森林模型的准确率为: {rf_accuracy:.2f}")

分类模型评估

模型评估是分类过程中至关重要的一个步骤。常见的评估指标包括:

  • 准确率(Accuracy):正确分类的样本数占总样本数的比例。

    $$ \text{准确率} = \frac{\text{正确分类样本数}}{\text{总样本数}} $$

  • 精准率(Precision):被分类为正类的样本中实际为正类的比例。

    $$ \text{精准率} = \frac{TP}{TP + FP} $$

  • 召回率(Recall):所有实际为正类的样本中,被正确分类为正类的比例。

    $$ \text{召回率} = \frac{TP}{TP + FN} $$

  • F1-score:精准率和召回率的调和平均。

    $$ F1 = 2 \times \frac{\text{精准率} \times \text{召回率}}{\text{精准率} + \text{召回率}} $$

结论

通过上述内容,我们了解了分类在数据挖掘中的重要性、基本步骤、常用算法以及模型评估。分类技术是我们从数据中提取有用信息的一种有效工具。接下来,在下一篇中,我们将探讨另一个重要的数据挖掘技术——聚类,希望大家继续关注!

分享转发

11 数据挖掘技术之聚类

在上一篇中,我们探讨了数据挖掘技术中的分类方法,了解了如何将数据分类到预定义的类别中。而这一篇,我们将深入了解聚类技术,这是一种无监督学习策略,用于将一组对象分成多个相似的子集或“簇”。

聚类的定义

聚类是将数据集中的相似对象分组的过程。在聚类中,没有先验的标签或类别,算法会根据数据的特征自动寻找相似性并形成不同的簇。每个簇可以被看作是数据中具有相似特征的对象集。

聚类的应用场景

聚类技术在许多领域都有广泛的应用,包括但不限于:

  • 市场细分:根据消费者的行为将市场分为不同的细分群体。
  • 图像处理:对图像进行分割,实现目标识别。
  • 社交网络分析:发现社交网络中的社区结构。
  • 客户行为分析:识别客户群体的特征,为个性化营销提供依据。

常见的聚类算法

接下来,我们将介绍一些常见的聚类算法。

K-Means算法

K-Means是一种流行的聚类算法,其基本思想是将数据分为K个簇,使得每个簇内对象的相似性尽可能高,而不同簇之间的相似性尽可能低。具体步骤如下:

  1. 初始化:随机选择K个初始聚类中心。
  2. 分配簇:将每个数据点分配给离其最近的聚类中心。
  3. 更新中心:计算每个簇的新中心,作为簇中所有点的均值。
  4. 迭代:重复步骤2和步骤3,直到聚类中心不再变化或变化很小。

层次聚类

层次聚类算法通过构建一个树形结构来表示数据的层次关系,无论是自底向上(凝聚型)还是自顶向下(分裂型)。这种方法不需要预先指定簇的数量,常用的距离度量有欧几里得距离、曼哈顿距离等。

DBSCAN

DBSCAN(基于密度的聚类算法)通过找出高密度区域来进行聚类。它可以识别任意形状的簇,并且对噪声和离群点具有较强的鲁棒性。其工作原理如下:

  1. 选择核心点:对于每个点,检查其周围的邻域,若邻域内点的数量大于某个阈值,则视为核心点。
  2. 扩展簇:从一个核心点出发,将其直接可达的所有点加入同一簇,并递归处理这些点。

案例:K-Means聚类实现

为了更好地理解聚类技术,我们将通过Python实现一个简单的K-Means聚类示例。

数据准备

首先,我们使用scikit-learnmake_blobs函数生成样本数据:

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

# 生成样本数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)

# 可视化数据
plt.scatter(X[:, 0], X[:, 1], s=30)
plt.title("生成的样本数据")
plt.show()

执行K-Means聚类

接下来,我们将对生成的数据进行K-Means聚类:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 应用K-Means算法
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)

# 获取聚类结果
y_kmeans = kmeans.predict(X)

# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=30, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75)
plt.title("K-Means聚类结果")
plt.show()

在这个案例中,我们生成了一个包含四个聚类的随机数据,使用K-Means算法将其聚类后,结果和聚类中心都得到了良好的可视化。

小结

在本篇教程中,我们深入探讨了聚类技术的基本概念、算法及其实际应用。聚类作为一种无监督学习方法,可以为数据分析提供强有力的工具,让我们在没有标签的数据中寻找隐藏的模式。对比前一篇的分类方法,聚类更偏向于从数据本身出发进行探索。

在下一篇中,我们将继续深入学习数据挖掘技术中的关联规则,探索如何从数据中挖掘有价值的关系和规律。欢迎继续关注我们的系列教程!

分享转发

12 数据挖掘技术之关联规则

在数据挖掘领域,关联规则是揭示数据间潜在关系的重要方法。它通常用于找出不同变量之间的关系,广泛应用于市场篮子分析、推荐系统等场景。本篇文章将详细介绍关联规则的基本概念、常用算法、实际应用案例,以及如何使用 Python 实现简单的关联规则挖掘。

关联规则的基本概念

关联规则的形式可以表示为 $X \Rightarrow Y$,其中 $X$ 和 $Y$ 是项集。这个规则的意思是:如果在一个事务中出现了 $X$,那么在很多情况下也会出现 $Y$。主要有以下几个重要指标来衡量关联规则的有效性:

  • **支持度 (Support)**:表示包含项集 $X \cup Y$ 的事务所占的比例,公式为:
    $$
    \text{Support}(X \cup Y) = \frac{\text{count}(X \cup Y)}{\text{total transactions}}
    $$

  • **置信度 (Confidence)**:表示在包含项集 $X$ 的事务中,同时也包含项集 $Y$ 的比例,公式为:
    $$
    \text{Confidence}(X \Rightarrow Y) = \frac{\text{Support}(X \cup Y)}{\text{Support}(X)}
    $$

  • **提升度 (Lift)**:表示规则 $X \Rightarrow Y$ 的强度,与 $X$ 和 $Y$ 的独立性关系有关,公式为:
    $$
    \text{Lift}(X \Rightarrow Y) = \frac{\text{Confidence}(X \Rightarrow Y)}{\text{Support}(Y)}
    $$

关联规则算法

在数据挖掘中,最著名的关联规则挖掘算法是 Apriori 算法和 FP-Growth 算法。

Apriori 算法

Apriori算法基于“先频繁后生成”的思想,借助支持度来发现频繁项集。其主要步骤如下:

  1. 生成候选项集:从单个项开始,计算所有项的支持度,找到频繁项集。
  2. 剪枝:利用频繁项集的特性,删去不可能成为频繁项集的项集。
  3. 迭代:不断重复上述过程,直到无法生成新的频繁项集为止。

FP-Growth 算法

与 Apriori 算法不同,FP-Growth算法不生成候选项集,而是构建一个 FP-tree(Frequent Pattern Tree),直接从中挖掘频繁项集。其步骤如下:

  1. 构建 FP-tree:扫描数据库,统计每个项的频次,构建树结构。
  2. 挖掘频繁项集:从 FP-tree 中递归地挖掘频繁项集,利用条件模式基生成局部频繁项集。

案例分析:市场篮子分析

下面我们通过一个市场篮子分析的案例来具体演示如何利用 Python 进行关联规则挖掘。

假设有以下交易数据:

Transaction ID Items
1 Milk, Bread
2 Milk, Diaper, Beer
3 Bread, Diaper
4 Milk, Bread, Diaper
5 Bread, Diaper

我们将使用 mlxtend 库中的 aprioriassociation_rules 函数来实现关联规则挖掘。

代码示例

首先,安装 mlxtend 库(如果尚未安装):

1
pip install mlxtend

接下来,使用以下代码进行关联规则挖掘:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import pandas as pd
from mlxtend.frequent_patterns import apriori, association_rules

# 创建事务数据
data = [['Milk', 'Bread'],
['Milk', 'Diaper', 'Beer'],
['Bread', 'Diaper'],
['Milk', 'Bread', 'Diaper'],
['Bread', 'Diaper']]

# 转换为 DataFrame 格式
df = pd.DataFrame(data, columns=['Items'])

# 将事务数据转换为一个热编码格式(One-Hot Encoding)
from mlxtend.preprocessing import TransactionEncoder
encoder = TransactionEncoder()
onehot = encoder.fit(data).transform(data)
onehot_df = pd.DataFrame(onehot, columns=encoder.columns_)

# 计算频繁项集
frequent_itemsets = apriori(onehot_df, min_support=0.4, use_colnames=True)

# 生成关联规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.5)

# 输出结果
print(rules)

结果解析

输出的关联规则将显示不同项之间的关系,比如如果购买了 Milk,则购买 Bread 的概率为 Confidence 的值。我们可以由此判断哪些商品的组合是值得推荐的。

总结

通过本篇文章,我们详细介绍了数据挖掘技术中的 关联规则,了解了其基本概念、常用算法及应用案例。采用 AprioriFP-Growth 算法,我们可以有效地发现数据中的有趣关系,下一篇我们将讨论模型评估与选择中的各种评估指标,帮助我们更好地理解算法的效果。

希望本系列教程能帮助数据挖掘小白们掌握相关知识,欢迎在后续学习中继续跟随我们的内容!

分享转发