机器学习实战记录(1)

决策树------划分数据集

def splitDataSet(dataSet, axis, value):		
	retDataSet = []										#创建返回的数据集列表
	for featVec in dataSet: 							#遍历数据集
		if featVec[axis] == value:
			reducedFeatVec = featVec[:axis]				#去掉axis特征
			reducedFeatVec.extend(featVec[axis+1:]) 	#将符合条件的添加到返回的数据集
			retDataSet.append(reducedFeatVec)
	return retDataSet		  							#返回划分后的数据集

这个代码就是按axis划分,然后每次把它去掉。

def splitDataSet(dataSet, axis, value):
  • dataSet:这是输入的数据集,通常是一个二维列表,其中每个子列表代表一个样本,最后一项通常是标签(分类)。
  • axis :这个参数是整数,表示当前划分的特征的索引位置。假设我们的数据集有多个特征(列),axis 就指定了你想要按哪一个特征来划分数据集。
  • value :这个参数是我们在数据集中按 axis 这个特征划分时,要求该特征的取值为 value。即:我们希望选择所有在此特征上值为 value 的样本。

返回的 retDataSet

retDataSet 是一个空列表,用来保存符合条件的子集。函数会遍历 dataSet,每次找到符合条件的样本(即特征 axis 的值为 value),就将该样本的特征信息(去掉当前特征)加入到 retDataSet

retDataSet = [] # 创建返回的数据集列表

  • 创建一个空的列表 retDataSet,用来保存符合条件的子集。
复制代码

python

复制代码

for featVec in dataSet: # 遍历数据集中的每一个样本

  • 使用 for 循环遍历 dataSet 中的每一行数据(每个 featVec)。每个 featVec 是一个样本,它包含多个特征值,通常最后一个元素是标签(类别)

if featVec[axis] == value:

  • 对于每一个样本 featVec,判断该样本的特征 axis 对应的取值是否等于 value。如果该样本在 axis 特征上的取值与 value 相等,就满足条件,应该将该样本加入返回的子集 retDataSet 中。

reducedFeatVec = featVec[:axis] # 去掉当前特征(axis)

  • 通过 featVec[:axis] 获取当前样本的特征,去掉 axis 位置的特征。比如,如果数据集中有5个特征(第0列到第4列),且 axis = 2,那么 featVec[:axis] 就是将样本中第2列之前的特征提取出来(不包括第2列),即 [featVec[0], featVec[1]]

reducedFeatVec.extend(featVec[axis+1:]) # 将符合条件的特征值部分加入返回的数据集

  • featVec[axis+1:] 表示去掉了 axis 位置的特征后的部分,即从 axis+1 到最后的特征。将这部分特征信息添加到 reducedFeatVec 中。extend 方法会将一个列表的元素加入到另一个列表中,确保 reducedFeatVec 包含了除了当前特征 axis 外的所有特征。

return retDataSet # 返回划分后的数据集

  • 最后,函数返回划分后的子集 retDataSet,它包含了所有在特定特征 axis 上取值为 value 的样本(每个样本去掉了 axis 特征)。

假设有如下数据集(dataSet):

dataSet = [
    ['青年', '否', '否', '一般', '不放贷'],
    ['青年', '否', '是', '好', '放贷'],
    ['青年', '是', '否', '好', '放贷'],
    ['青年', '是', '是', '一般', '不放贷'],
    ['中年', '否', '否', '一般', '不放贷'],
    ['中年', '否', '是', '好', '放贷'],
    ['中年', '是', '否', '好', '放贷'],
    ['中年', '是', '是', '一般', '不放贷'],
    ['老年', '否', '否', '一般', '不放贷'],
    ['老年', '否', '是', '好', '放贷'],
    ['老年', '是', '否', '好', '放贷'],
    ['老年', '是', '是', '一般', '不放贷']
]

假设我们希望根据第二个特征"是否有工作"(axis=1)进行划分,我们调用 splitDataSet 函数,并指定取值

result = splitDataSet(dataSet, 1, '否')

在这个例子中,axis=1 表示我们正在根据第二个特征("是否有工作")进行划分,value='否' 表示我们选择特征值为"否"的样本。调用 splitDataSet 函数后,返回的 result 是:

[
    ['青年', '否', '否', '一般', '不放贷'],
    ['青年', '否', '是', '好', '放贷'],
    ['中年', '否', '否', '一般', '不放贷'],
    ['中年', '否', '是', '好', '放贷'],
    ['老年', '否', '否', '一般', '不放贷'],
    ['老年', '否', '是', '好', '放贷']
]

这些样本的第二个特征都是"否"。可以看到,函数成功地将数据集按第二个特征值为"否"进行划分,且去除了"是否有工作"这一特征,返回了包含其余特征的子集。

相关推荐
中杯可乐多加冰44 分钟前
【玩转OCR | 腾讯云智能结构化OCR应用探索和场景实践】
人工智能·深度学习·信息可视化·云计算·ocr·腾讯云·玩转腾讯云ocr
ROBOT玲玉1 小时前
PaddleOCROCR关键信息抽取训练过程
人工智能·ocr
feifeikon4 小时前
机器学习DAY3续:逻辑回归、极大似然、梯度下降 (逻辑回归完)
人工智能·机器学习·逻辑回归
IT古董4 小时前
【机器学习】机器学习的基本分类-半监督学习-Ladder Networks
学习·机器学习·分类·半监督学习
贝多财经4 小时前
高频生活场景带动低频金融服务,美团企业版点燃场景金融建设引擎
人工智能·金融·生活
百家方案5 小时前
「下载」“一机游”智慧旅游平台解决方案:智慧文旅4大应用8大特色,实现旅游监管、营销与服务的全面升级
大数据·人工智能·智慧文旅·智慧旅游
deephub6 小时前
SCOPE:面向大语言模型长序列生成的双阶段KV缓存优化框架
人工智能·深度学习·transformer·大语言模型·kv缓存
AidLux6 小时前
智能边缘计算×软硬件一体化:开启全场景效能革命新征程(高校开发者作品)
人工智能·边缘计算
程序猿阿伟6 小时前
《迁移学习与联邦学习:推动人工智能发展的关键力量》
人工智能·机器学习·迁移学习
mt4481396 小时前
突发!刚刚,OpenAI裂变成了两块
人工智能·yolo·语言模型·chatgpt·gpt-3·bard·文心一言