赞
踩
朴素贝叶斯算法是采用每个属性归属于哪个类的概率来进行预测。我们采用监督性学习方法,对某个预测性建模的问题采用概率建模。
下面利用“皮马印第安人糖尿病数据集”。该数据集由美国国立糖尿病、消化和肾脏疾病研究所(United States National Institute of Diabetes and Digestive and Kidney Diseases,简称NIDDK)提供。
数据集
可从 https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv 下载,具体方法是打开此链接后,会看到数据展现在网页中,右击save as,保存类型选为“Microsoft Excel Comman Separated Values File“,即CSV格式,文件名按默认为pima-indians-diabetes.data.csv。
数据里包行了768行 X 9列数据。每一行表示一个超过21岁的皮马女性糖尿病患者的信息。
前8列表示属性特征
1.怀孕次数。
2.2小时口服葡萄糖耐量测试中得到的血糖浓度。
3.舒张期血压(mm Hg)。
4.三头肌皮脂厚度(mm)。
5.2小时血清胰岛素(mu U/ml)。
6.身体质量指数(体重kg/(身高in m)^2)。
7.糖尿病家族遗传作用值。
8.年龄。
第9列表示分类结果,这个类指明以测量时间为止,患者是否是在5年之内感染的糖尿病。如果是,则为1,否则为0。
算法的实现过程分为如下几步:
(一)处理数据:从CSV文件中载入数据,然后划分为训练集和测试集。
(二)提取数据特征:提取训练数据集的属性特征,以便我们计算概率并做出预测。
(三)单一预测:使用数据集的特征生成单个预测。
(四)多重预测:基于给定测试数据集和一个已提取特征的训练数据集生成预测。
(五)评估精度:评估对于测试数据集的预测精度作为预测正确率。
(六)合并代码:使用所有代码呈现一个完整的、独立的朴素贝叶斯算法的实现。
import csv def loadCsv(filename): lines = csv.reader(open(filename, "r")) dataset = list(lines) for i in range(len(dataset)): dataset[i] = [float(x) for x in dataset[i]] #为何要把每个数都转为浮点数 return dataset #测试 filename = './data/pima-indians-diabetes.data.csv' dataset = loadCsv(filename) print('Loaded data file {0} with {1} rows'.format(filename, len(dataset))) import random def splitDataset(dataset, splitRatio): trainSize = int(len(dataset) * splitRatio) trainSet = [] copy = list(dataset) while len(trainSet) < trainSize: index = random.randrange(len(copy)) trainSet.append(copy.pop(index)) return [trainSet, copy] #测试 dataset = [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。