【Python数据挖掘】用朴素贝叶斯预测人类活动识别

朴素贝叶斯

朴素贝叶斯方法是一组基于应用贝叶斯定理的监督学习算法,其“朴素”假设是给定类变量值的每对特征之间的条件独立性。贝叶斯定理陈述了以下关系,给定类变量 𝑦 𝑦 y 和从属特征向量 𝑥 1 𝑥_1 x1 𝑥 𝑛 𝑥_𝑛 xn ,:
P ( y ∣ x 1 , … , x n ) = P ( y ) P ( x 1 , … x n ∣ y ) P ( x 1 , … , x n ) P(y \mid x_1, \dots, x_n) = \frac{P(y) P(x_1, \dots x_n \mid y)} {P(x_1, \dots, x_n)} P(yx1,,xn)=P(x1,,xn)P(y)P(x1,xny)

使用朴素的条件独立假设,我们有
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲\begin{aligned}…

然后,我们可以使用最大后验(MAP)估计来估计 𝑃 ( 𝑦 ) 𝑃(𝑦) P(y) 𝑃 ( 𝑥 𝑖 ∣ 𝑦 ) 𝑃(𝑥_𝑖∣𝑦) P(xiy);前者是训练集中类 𝑦 𝑦 y的相对频率。

高斯贝叶斯

GaussianNB 实现了高斯朴素贝叶斯算法进行分类。
假设特征的可能性是高斯的:
P ( x i ∣ y ) = 1 2 π σ y 2 exp ⁡ ( − ( x i − μ y ) 2 2 σ y 2 ) P(x_i \mid y) = \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x_i - \mu_y)^2}{2\sigma^2_y}\right) P(xiy)=2πσy2 1exp(2σy2(xiμy)2)
参数 σ y \sigma_y σy μ y \mu_y μy使用最大似然估计。

示例 - 训练数据生成如下:

import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
y = np.array([1, 1, 1, 2, 2, 2])

**Q1:**训练 GaussianNB 模型:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_digits #load_digits手写数字数据集
from sklearn.model_selection import train_test_split
#实例化
clf = GaussianNB()
#训练数据 fit相当于train
clf.fit(X, y) 
GaussianNB(priors=None, var_smoothing=1e-09)

Q2: 预测数据 [-0.8,-1]

X_test = np.array([[-0.8,-1]])
y_test = np.array([1])
pred = clf.predict(X_test)
print(pred)
[1]

多项式NB

多项式朴素贝叶斯分类器适用于具有离散特征的分类(例如,用于文本分类的字数)。

示例 - 训练数据生成如下:

import numpy as np
X = np.random.randint(5, size=(6, 100))
y = np.array([1, 2, 3, 4, 5, 6])

**Q3:**训练 MultinomialNB 模型:

#导⼊入需要的模块和库
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_blobs
from sklearn.metrics import brier_score_loss

clf =MultinomialNB()
#训练数据 fit相当于train
clf.fit(X, y) 

MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)

**Q4:**预测数据X[2:3]:

X_test = np.random.randint(2,size=(3,100))
y_test = np.array([1])
pred = clf.predict(X_test)
print(pred)
[1 3 5]

处理“鸢尾花”数据

使用 GaussianNB 算法对 ‘iris’ 数据进行分类任务

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris_dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris_dataset['data'], iris_dataset['target'], random_state=142)

**Q5:**报告测试数据的精度结果:

model = GaussianNB().fit(X_train,y_train)
pre_y = model.predict(X_test)
m=0
for i in range(len(pre_y)):
    if pre_y[i]==y_test[i]:
        m=m+1
print ("精度:",m*1.0/len(pre_y))
精度: 0.8947368421052632

预测人类活动识别 (HAR)

本练习的目的是根据来自 HAR 数据集中 53 个不同特征的生理活动测量来预测当前的人类活动。提供了训练 (har_train.csv) 和测试 (har_validate.csv) 数据集。

**Q6:**构建朴素贝叶斯模型,对测试数据集进行预测并计算混淆矩阵。注:请参考sklearn.metrics.confusion_matrix

import pandas as pd
from sklearn.metrics import confusion_matrix
train=pd.read_csv('C:/Users/QYH123/Python/数据挖掘/har_train.csv',parse_dates=True)
test=pd.read_csv('C:/Users/QYH123/Python/数据挖掘//har_validate.csv',parse_dates=True)
train.head()
classeroll_beltpitch_beltyaw_belttotal_accel_beltgyros_belt_xgyros_belt_ygyros_belt_zaccel_belt_xaccel_belt_y...total_accel_forearmgyros_forearm_xgyros_forearm_ygyros_forearm_zaccel_forearm_xaccel_forearm_yaccel_forearm_zmagnet_forearm_xmagnet_forearm_ymagnet_forearm_z
0A1.418.07-94.430.000.0-0.02-214...360.030.00-0.02192203-215-17654476
1A1.418.07-94.430.020.0-0.02-224...360.020.00-0.02192203-216-18661473
2A1.428.07-94.430.000.0-0.02-205...360.03-0.020.00196204-213-18658469
3A1.488.05-94.430.020.0-0.03-223...360.02-0.020.00189206-214-16658469
4A1.458.06-94.430.020.0-0.02-214...360.02-0.02-0.03193203-215-9660478

5 rows × 53 columns

train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 13737 entries, 0 to 13736
Data columns (total 53 columns):
classe                  13737 non-null object
roll_belt               13737 non-null float64
pitch_belt              13737 non-null float64
yaw_belt                13737 non-null float64
total_accel_belt        13737 non-null int64
gyros_belt_x            13737 non-null float64
gyros_belt_y            13737 non-null float64
gyros_belt_z            13737 non-null float64
accel_belt_x            13737 non-null int64
accel_belt_y            13737 non-null int64
accel_belt_z            13737 non-null int64
magnet_belt_x           13737 non-null int64
magnet_belt_y           13737 non-null int64
magnet_belt_z           13737 non-null int64
roll_arm                13737 non-null float64
pitch_arm               13737 non-null float64
yaw_arm                 13737 non-null float64
total_accel_arm         13737 non-null int64
gyros_arm_x             13737 non-null float64
gyros_arm_y             13737 non-null float64
gyros_arm_z             13737 non-null float64
accel_arm_x             13737 non-null int64
accel_arm_y             13737 non-null int64
accel_arm_z             13737 non-null int64
magnet_arm_x            13737 non-null int64
magnet_arm_y            13737 non-null int64
magnet_arm_z            13737 non-null int64
roll_dumbbell           13737 non-null float64
pitch_dumbbell          13737 non-null float64
yaw_dumbbell            13737 non-null float64
total_accel_dumbbell    13737 non-null int64
gyros_dumbbell_x        13737 non-null float64
gyros_dumbbell_y        13737 non-null float64
gyros_dumbbell_z        13737 non-null float64
accel_dumbbell_x        13737 non-null int64
accel_dumbbell_y        13737 non-null int64
accel_dumbbell_z        13737 non-null int64
magnet_dumbbell_x       13737 non-null int64
magnet_dumbbell_y       13737 non-null int64
magnet_dumbbell_z       13737 non-null int64
roll_forearm            13737 non-null float64
pitch_forearm           13737 non-null float64
yaw_forearm             13737 non-null float64
total_accel_forearm     13737 non-null int64
gyros_forearm_x         13737 non-null float64
gyros_forearm_y         13737 non-null float64
gyros_forearm_z         13737 non-null float64
accel_forearm_x         13737 non-null int64
accel_forearm_y         13737 non-null int64
accel_forearm_z         13737 non-null int64
magnet_forearm_x        13737 non-null int64
magnet_forearm_y        13737 non-null int64
magnet_forearm_z        13737 non-null int64
dtypes: float64(24), int64(28), object(1)
memory usage: 5.6+ MB
from sklearn.model_selection import train_test_split
 
X = train.loc[:,train.columns != 'classe']
y = test['classe']
from sklearn.naive_bayes import BernoulliNB
 
model = BernoulliNB()
model.fit(X_train, y_train)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
y_pred = model.predict(X_test)
import pandas as pd
from sklearn import *
print("model accuracy:", metrics.accuracy_score(y_test, y_pred))
model accuracy: 0.18421052631578946
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
朴素贝叶斯分类算法是一种基于概率的分类算法,对于给定的输入数据,通过计算它们属于每个类别的概率来进行分类。在使用朴素贝叶斯算法时,我们需要使用训练数据集进行模型的训练。 下面是Python中使用西瓜数据集进行朴素贝叶斯分类的源码示例: ```python import pandas as pd from sklearn.naive_bayes import GaussianNB # 读取西瓜数据集 data = pd.read_csv('watermelon.csv') # 将数据集分为训练数据和测试数据 train_data = data[:8] # 前8条数据作为训练数据 test_data = data[8:] # 后2条数据作为测试数据 # 选择特征和目标变量 features = train_data[['色泽', '根蒂', '敲声', '纹理', '脐部', '触感']] target = train_data['好瓜'] # 创建朴素贝叶斯分类器 classifier = GaussianNB() # 拟合模型 classifier.fit(features, target) # 预测测试数据 test_features = test_data[['色泽', '根蒂', '敲声', '纹理', '脐部', '触感']] predictions = classifier.predict(test_features) # 打印预测结果 for i, prediction in enumerate(predictions): print('测试样本', i+1, '预测结果:', prediction) ``` 在这个示例中,我们首先使用Pandas库读取西瓜数据集。然后,将数据集分为训练数据和测试数据,一般情况下会随机划分。接着,选择特征和目标变量,并创建了一个GaussianNB的朴素贝叶斯分类器。我们使用fit方法将训练数据集拟合到模型中,然后使用测试数据进行预测,并打印预测结果。 需要注意的是,此示例仅适用于具有色泽、根蒂、敲声、纹理、脐部和触感这些特征的西瓜数据集。你可以根据你的具体数据集进行调整。此外,还需要确保西瓜数据集的CSV文件('watermelon.csv')在当前工作目录中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值