首页 > 解决方案 > 为了使用NB分类器,特征何时独立?

问题描述

我正在使用分类模型,因为我是新手,所以我有一个问题。据说朴素贝叶斯在特征相互独立时表现良好。我如何知道我的功能集中的功能是否独立?有什么例子吗?谢谢!!

标签: machine-learningclassificationbayesiannaivebayes

解决方案


特征的独立性

在大多数情况下,人们想要检查一个特征是否与另一个特征高度相关(甚至重复),以便可以省略其中一个。相关性为 1 意味着,如果省略相关特征之一,您不会丢失任何信息。有多种方法可以检查相关性,例如在Pythonnp.corrcoef和.pd.DataFrame.corrscipy.stats.pearsonr

但事情可能更复杂。如果您不能使用 featuresx_1, ..., x_n来预测 feature ,则 features 是相互独立的x_n+1。在大多数情况下,人们可能会检查特征是否彼此线性相关,这意味着:

x_n+1 = a_1 * x_1 + ... + a_n * x_n + error

如果是这种情况(并且误差贡献很小),人们可能会忽略依赖特征。请注意,因此您可以省略所有 - 特征中的任何一个n+1,因为您可以重构您的方程以x_i在 lhs 上有任何特征。要检查这一点,可能会计算特征值并检查接近零的值。

移除依赖特征

from sklearn import datasets
import numpy as np
from sklearn import decomposition
from sklearn import naive_bayes
from sklearn import model_selection
X, y = datasets.make_classification(n_samples=10000, n_features=10, n_repeated=0, n_informative=6, n_redundant=4, n_classes=2)
    u, s, vh = np.linalg.svd(X)

#display s
s
array([8.06415389e+02, 6.69591201e+02, 4.31329281e+02, 4.02622029e+02,
       2.85447317e+02, 2.53360358e+02, 4.07459972e-13, 2.55851809e-13,
       1.72445591e-13, 6.68493846e-14])

所以基本上,4个功能是多余的。所以现在,我们可以使用诸如主成分分析或线性判别分析之类的特征减少技术将特征减少到只有 6 个。

X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y)
gnb = naive_bayes.GaussianNB()
gnb.fit(X_train, y_train)
gnb.score(X_test, y_test)  #results in 0.7216

现在我们将特征减少到 6 个。

pca = decomposition.PCA(n_components=6)
X_trafo = pca.fit_transform(X)
X_train, X_test, y_train, y_test = model_selection.train_test_split(X_trafo, y)
gnb.fit(X_train, y_train)
gnb.score(X_test, y_test) #results in 0.7216

请注意,这些值不需要完全相同。


推荐阅读