生命之风的低语
Whispers in the Wind of Life.

西瓜数据集介绍以及获取。

2025-05-10 09:33:52

西瓜数据集介绍。

这里介绍一下《机器学习》中的西瓜数据。数据集也不少,放在别的文章中介绍就会略占篇幅,还是单独的介绍一下并且给出数据样本。

在西瓜书中,主要使用到的数据样本共有2.0、3.0、4.0这三个版本,但是还有一些用到的数据集。

西瓜数据集2.0

在西瓜数据集2.0中的特征主要有以下几种:色泽、根蒂、敲声、纹理、脐部、触感。这几个数值都是离散数值,每个特征共有三个离散值。

来自西瓜书中的西瓜数据集2.0:

编号色泽根蒂敲声纹理脐部触感好瓜1青绿蜷缩浊响清晰凹陷硬滑是2乌黑蜷缩沉闷清晰凹陷硬滑是3乌黑蜷缩浊响清晰凹陷硬滑是4青绿蜷缩沉闷清晰凹陷硬滑是5浅白蜷缩浊响清晰凹陷硬滑是6青绿稍蜷浊响清晰稍凹软粘是7乌黑稍蜷浊响稍糊稍凹软粘是8乌黑稍蜷浊响清晰稍凹硬滑是9乌黑稍蜷沉闷稍糊稍凹硬滑否10青绿硬挺清脆清晰平坦软粘否11浅白硬挺清脆模糊平坦硬滑否12浅白蜷缩浊响模糊平坦软粘否13青绿稍蜷浊响稍糊凹陷硬滑否14浅白稍蜷沉闷稍糊凹陷硬滑否15乌黑稍蜷浊响清晰稍凹软粘否16浅白蜷缩浊响模糊平坦硬滑否17青绿蜷缩沉闷稍糊稍凹硬滑否

看的也是眼花缭乱,这里共有8个好瓜和9个坏瓜样本。

以下代码可以获取带上面你的样本数据和对应的标签,以及某个特征值的所有可能性。

def createDataSet():

"""

创建测试的数据集

:return:

"""

dataSet = [

# 1

['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],

# 2

['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好瓜'],

# 3

['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],

# 4

['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好瓜'],

# 5

['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],

# 6

['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '好瓜'],

# 7

['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘', '好瓜'],

# 8

['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑', '好瓜'],

# ----------------------------------------------------

# 9

['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', '坏瓜'],

# 10

['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘', '坏瓜'],

# 11

['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑', '坏瓜'],

# 12

['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘', '坏瓜'],

# 13

['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑', '坏瓜'],

# 14

['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑', '坏瓜'],

# 15

['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '坏瓜'],

# 16

['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑', '坏瓜'],

# 17

['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', '坏瓜']

]

# 特征值列表

labels = ['色泽', '根蒂', '敲击', '纹理', '脐部', '触感']

# 特征对应的所有可能的情况

labels_full = {}

for i in range(len(labels)):

labelList = [example[i] for example in dataSet]

uniqueLabel = set(labelList)

labels_full[labels[i]] = uniqueLabel

return dataSet, labels, labels_full

西瓜数据集3.0

相较于上面的2.0数据集,3.0又增添了两个特征值:密度和含糖率。这两个特征值都是连续数值。这里不再列出表格,直接给出获取样本数据的代码。

def createDataSet():

"""

创建测试的数据集,里面的数值中具有连续值

:return:

"""

dataSet = [

# 1

['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.697, 0.460, '好瓜'],

# 2

['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', 0.774, 0.376, '好瓜'],

# 3

['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.634, 0.264, '好瓜'],

# 4

['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', 0.608, 0.318, '好瓜'],

# 5

['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.556, 0.215, '好瓜'],

# 6

['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.403, 0.237, '好瓜'],

# 7

['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘', 0.481, 0.149, '好瓜'],

# 8

['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑', 0.437, 0.211, '好瓜'],

# ----------------------------------------------------

# 9

['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', 0.666, 0.091, '坏瓜'],

# 10

['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘', 0.243, 0.267, '坏瓜'],

# 11

['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑', 0.245, 0.057, '坏瓜'],

# 12

['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘', 0.343, 0.099, '坏瓜'],

# 13

['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑', 0.639, 0.161, '坏瓜'],

# 14

['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑', 0.657, 0.198, '坏瓜'],

# 15

['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.360, 0.370, '坏瓜'],

# 16

['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑', 0.593, 0.042, '坏瓜'],

# 17

['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', 0.719, 0.103, '坏瓜']

]

# 特征值列表

labels = ['色泽', '根蒂', '敲击', '纹理', '脐部', '触感', '密度', '含糖率']

# 特征对应的所有可能的情况

labels_full = {}

for i in range(len(labels)):

labelList = [example[i] for example in dataSet]

uniqueLabel = set(labelList)

labels_full[labels[i]] = uniqueLabel

return dataSet, labels, labels_full

西瓜数据集4.0

西瓜数据集只包含了密度和含糖率,并没有给出分类标签,在聚类中出现了4.0数据集。

def createDataSet():

"""

创建测试的数据集,里面的数值中具有连续值

:return:

"""

dataSet = [

# 1

[0.697, 0.460],

# 2

[0.774, 0.376],

# 3

[0.634, 0.264],

# 4

[0.608, 0.318],

# 5

[0.556, 0.215],

# 6

[0.403, 0.237],

# 7

[0.481, 0.149],

# 8

[0.437, 0.211],

# 9

[0.666, 0.091],

# 10

[0.243, 0.267],

# 11

[0.245, 0.057],

# 12

[0.343, 0.099],

# 13

[0.639, 0.161],

# 14

[0.657, 0.198],

# 15

[0.360, 0.370],

# 16

[0.593, 0.042],

# 17

[0.719, 0.103]

# 18

[0.359, 0.188]

# 19

[0.339, 0.241]

# 20

[0.282, 0.257]

# 21

[0.748, 0.232]

# 22

[0.714, 0.346]

# 23

[0.483, 0.312]

# 24

[0.478, 0.437]

# 25

[0.525, 0.369]

# 26

[0.751, 0.489]

# 27

[0.532, 0.472]

# 28

[0.473, 0.376]

# 29

[0.725, 0.445]

# 30

[0.446, 0.459]

]

# 特征值列表

labels = ['密度', '含糖率']

# 特征对应的所有可能的情况

labels_full = {}

for i in range(len(labels)):

labelList = [example[i] for example in dataSet]

uniqueLabel = set(labelList)

labels_full[labels[i]] = uniqueLabel

return dataSet, labels, labels_full

具有缺失数据的3.0数据集

在决策树部分介绍如何处理缺失值的时候用到了该数据集。

def createDataSet():

"""

创建测试的数据集

:return:

"""

dataSet = [

# 1

['-', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],

# 2

['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '-', '好瓜'],

# 3

['乌黑', '蜷缩', '-', '清晰', '凹陷', '硬滑', '好瓜'],

# 4

['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好瓜'],

# 5

['-', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],

# 6

['青绿', '稍蜷', '浊响', '清晰', '-', '软粘', '好瓜'],

# 7

['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘', '好瓜'],

# 8

['乌黑', '稍蜷', '浊响', '-', '稍凹', '硬滑', '好瓜'],

# ----------------------------------------------------

# 9

['乌黑', '-', '沉闷', '稍糊', '稍凹', '硬滑', '坏瓜'],

# 10

['青绿', '硬挺', '清脆', '-', '平坦', '软粘', '坏瓜'],

# 11

['浅白', '硬挺', '清脆', '模糊', '平坦', '-', '坏瓜'],

# 12

['浅白', '蜷缩', '-', '模糊', '平坦', '软粘', '坏瓜'],

# 13

['-', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑', '坏瓜'],

# 14

['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑', '坏瓜'],

# 15

['乌黑', '稍蜷', '浊响', '清晰', '-', '软粘', '坏瓜'],

# 16

['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑', '坏瓜'],

# 17

['青绿', '-', '沉闷', '稍糊', '稍凹', '硬滑', '坏瓜']

]

# 特征值列表

labels = ['色泽', '根蒂', '敲击', '纹理', '脐部', '触感']

# 各个样本的权重

Wx = []

for i in range(len(dataSet)):

Wx.append(1)

# 特征对应的所有可能的情况

labels_full = {}

for i in range(len(labels)):

labelList = [example[i] for example in dataSet if example[i] != '-']

uniqueLabel = set(labelList)

labels_full[labels[i]] = uniqueLabel

return dataSet, labels, labels_full, Wx