目录
项目介绍
目的:在机器学习算法中引进了并行计算,更快地训练模型,从而使机器能够通过特征A、B去推测另一个特征C(特征A和B可以是血糖浓度、血压高低,特征C可以是身体状况)。
数据:刚好手上有一份20岁成年人的体测数据,所以本次实验使用体测数据,如身高、体重、肺活量和性别的数据来训练模型。
总的来说,在这类项目中数据量越大,训练出的模型会越准确,但是训练耗时也会随之增加。为了减少训练时长,所以本次实验引进了并行计算,减少计算时间。
本项目由以下四部分组成:
3、MPI优化
4、OpenMP优化
通过身高、体重推测性别的准确度
本项目用了150行C语言代码实现高斯-朴素贝叶斯,虽受限于数据集的特征值少,但预测结果准确度仍有84.7%。
项目可行性:原理简介
高斯-朴素贝叶斯即高斯分布(正态分布)+朴素贝叶斯。
高斯分布和朴素贝叶斯都是高中知识这里就不科普了,具体百度就好。
高斯分布(正态分布)
通过以往的科学研究发现,人类的身高和体重基本满足高斯分布的。
找了许多资料发现,其实人类的身高在几个区间特别集中,图像是有几个峰值的高斯分布曲线。
我们可以通过数据集来获取高斯分布所需要的:平均值(u)、标准差(p)。
//dataSet是数据集
double u=0; //平均值
double p=0; //标准差
//求平均值
for(i=0;i<dataLen;i++){
if(dataSet[i][0]==sex){
sum=sum+1;
u=u+dataSet[i][column];
//printf("%lf\n",dataSet[i][column]);
}
}
u=u/sum;
//求标准差
double numSum=0;
for(i=0;i<dataLen;i++){
if(dataSet[i][0]==sex){
numSum=numSum+pow( dataSet[i][column]-u , 2 );
}
}
p=sqrt(numSum/dataLen);
只要有了平均值和标准差,我们就能通过高斯分布的概率密度函数来获得以下这四个概率:
P(身高=160|性别=女性)、P(体重=50|性别=女性)
P(身高=160|性别=男性)、P(体重=50|性别=男性)