C语言手撕高斯朴素贝叶斯 - 通过身高和体重推测性别(机器学习)

本文介绍了使用C语言实现的高斯朴素贝叶斯算法,通过身高和体重数据推测性别,准确度达到84.7%。项目包括并行计算优化,利用高斯分布特性处理数据,通过计算特征概率进行分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

项目介绍

通过身高、体重推测性别的准确度

项目可行性:原理简介

高斯分布(正态分布)

朴素贝叶斯

代码流程

获取数据(数据清洗)

代码实现

头文件 allHead.h

源文件 handleData.cpp

源文件(主函数) naiveBayes.cpp


项目介绍

目的:在机器学习算法中引进了并行计算,更快地训练模型,从而使机器能够通过特征A、B去推测另一个特征C(特征A和B可以是血糖浓度、血压高低,特征C可以是身体状况)。

数据:刚好手上有一份20岁成年人的体测数据,所以本次实验使用体测数据,如身高、体重、肺活量和性别的数据来训练模型。

总的来说,在这类项目中数据量越大,训练出的模型会越准确,但是训练耗时也会随之增加。为了减少训练时长,所以本次实验引进了并行计算,减少计算时间。

本项目由以下四部分组成:

1、通过身高、体重推测性别

2、通过身高、体重、肺活量推测性别

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|性别=男性)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值