使用PowerTransformer处理数据提高朴素贝叶斯-高斯分类器的准确率

一、PowerTransformer介绍

        PowerTransformer是一个sklearn中的预处理模块,可以对数据进行变换,使其更符合高斯分布或者更加均匀分布。主要用于处理数据集中存在偏态分布的情况,常用于数据预处理。PowerTransformer提供了两种变换方法:Yeo-Johnson变换和Box-Cox变换。Yeo-Johnson变换可以处理任何形式的数据(正数、负数、零),而Box-Cox变换仅适用于正数数据。
PowerTransformer的操作流程如下:
        1. 通过fit方法对数据进行拟合以得到转换的参数。
        2. 通过transform方法对数据进行转换并返回转换后的数据。
        PowerTransformer还提供了inverse_transform方法来反转换数据,将转换后的数据恢复为原始数据。使用PowerTransformer可以有效地提高模型的准确性,特别是在使用线性模型时,可以提高模型的收敛速度和稳定性。

二、主要参数介绍

method 变化方法,可选,默认为yeo-johnson
standardize确定是否应标准化数据。默认是 True
copy默认为True,以避免更改原始输入



三、实例实现

代码实现:

import numpy as np
import pandas as pd
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.naive_bayes import GaussianNB
df = pd.read_csv('./indian_liver_patient_dataset.csv')
df.isna().sum()
df['gender'] = LabelEncoder().fit_transform(df['gender'])
# 查看类别计数
print(df['class'].value_counts())


# 对数据进行简单的过采样
df_2 = df[df['class'] == 2]
df = pd.concat([df, df_2])
df = pd.concat([df, df_2])
print(df['class'].value_counts())


X = df.iloc[:, :-1]  # 特征列
Y = df.iloc[:, -1:].values.ravel()  # 目标列

# 直接划分训练集与测试集进行分类
X_train, X_test, y1_train, y1_test = train_test_split(X, Y, test_size=0.2, random_state=0)
gnb1 = GaussianNB()
gnb1.fit(X_train,y1_train)
pre = gnb1.predict(X_test)
pre = pre.astype(np.int64)
acc_score = round(accuracy_score(pre, y1_test), 4)
print('未进行正态化处理的准确率:{}'.format(acc_score))

# 对数据进行正态化处理
from sklearn.preprocessing import PowerTransformer
powerTransformer = PowerTransformer()
powerTransformer.fit(X)
px = powerTransformer.transform(X)
px_train, px_test, y2_train, y2_test = train_test_split(px, Y, test_size=0.2, random_state=0)

# 对正态化处理的数据进行分类
gnb2 = GaussianNB()
gnb2.fit(px_train,y2_train)
pre = gnb2.predict(px_test)
pre = pre.astype(np.int64)
acc_score = round(accuracy_score(pre, y2_test), 4)
print('进行正态化处理准确率:{}'.format(acc_score))

结果:

未进行正太化处理的准确率:0.6739
进行正太化处理的准确率:0.7065

         可以看到正态化后的特征构造高斯贝叶斯模型,比直接使用高斯贝叶斯模型效果要稍好一点。虽然在许多情况下,对数据进行正态化处理可以提高高斯贝叶斯模型的准确率,但这并不是绝对的。在数据分布偏斜较大、存在离群点或者不符合正态分布假设的情况下,进行正态化处理可能会降低模型的准确率。因此,在实际应用中还需预先分析数据特征。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值