我们可以经由过程加载皮马印第安人数据集,然后打印出数据样本的个数,以此测试这个函数。
- filename = 'pima-indians-diabetes.data.csv'
- dataset = loadCsv(filename)
- print('Loaded data file {0} with {1} rows').format(filename, len(dataset))
运行测试,你会看到如下结不雅:
- Loaded data file iris.data.csv with 150 rows
下一步,我们将数据分为用于朴实贝叶斯猜测的练习数据集,以及用来评估模型精度的测试数据集。我们须要将数据集随机分为包含67%的练习集合和包含33%的测试集(这是在此数据集上测试算法的平日比率)。
下面是splitDataset()函数,它以给定的划分比例将数据集进行划分。
- 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]
我们可以定义一个具有5个样例的数据集来进行测试,起首它分为练习数据集和测试数据集,然后打印出来,看看每个数据样本最终落在哪个数据集。
- dataset = [[1], [2], [3], [4], [5]]
- splitRatio = 0.67
- train, test = splitDataset(dataset, splitRatio)
- print('Split {0} rows into train with {1} and test with {2}').format(len(dataset), train, test)
- Split 5 rows into train with [[4], [3], [5]] and test with [[1], [2]]
提取数据特点
朴实贝叶斯模型包含练习数据集中数据的特点,然后应用这个数据特点来做猜测。
所收集的练习数据的特点,包含相对于每个类的每个属性的均值和标准差。举例来说,如不雅如不雅有2个类和7个数值属性,然后我们须要每一个属性(7)和类(2)的组合的均值和标准差,也就是14个属性特点。
在对特定的属性归属于每个类的概率做计算、猜测时,将用到这些特点。
我们将数据特点的获取划分为以下的子义务:
- 按类别划分数据
- 计算均值
- 计算标准差
- 提取数据集特点
- 按类别提取属性特点
按类别划分数据
起首将练习数据集中的样本按照类别进行划分,然后计算出每个类的统计数据。我们可以创建一个类别到属于词攀类其余样本列表的的映射,并将全部数据集中的样本分类到响应的列表。
下面的SeparateByClass()函数可以完成这个义务: