特征选择中如何选择卡方阈值
How to choose the Chi Squared threshold in feature selection
关于这个:
我找到了这段代码:
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_selection import chi2
THRESHOLD_CHI = 5 # or whatever you like. You may try with
# for threshold_chi in [1,2,3,4,5,6,7,8,9,10] if you prefer
# and measure the f1 scores
X = df['text']
y = df['labels']
cv = CountVectorizer()
cv_sparse_matrix = cv.fit_transform(X)
cv_dense_matrix = cv_sparse_matrix.todense()
chi2_stat, pval = chi2(cv_dense_matrix, y)
chi2_reshaped = chi2_stat.reshape(1,-1)
which_ones_to_keep = chi2_reshaped > THRESHOLD_CHI
which_ones_to_keep = np.repeat(which_ones_to_keep ,axis=0,repeats=which_ones_to_keep.shape[1])
此代码计算卡方检验,应将最佳特征保持在选定的阈值内。
我的问题是如何为卡方测试分数选择阈值?
卡方没有特定的结果范围,所以很难事先确定一个阈值。通常你可以做的是根据变量的 p 值对变量进行排序,逻辑是 p 值越低越好,因为它们意味着特征和目标变量之间的相关性更高(我们想丢弃独立的特征,即不目标变量的预测变量)。在这种情况下,您无论如何都必须决定要保留多少特征,这是一个超参数,您可以手动调整或使用网格搜索更好地调整。
请注意,您可以避免手动执行 selection,sklearn 已经实现了一个函数 SelectKBest 到 select 基于卡方的最佳 k 个特征,您可以使用它如下:
from sklearn.feature_selection import SelectKBest, chi2
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
但如果出于任何原因你想完全依赖原始 chi2 值,你可以计算变量中的最小值和最大值,然后将间隔分成 n 步以通过网格搜索进行测试。
关于这个:
我找到了这段代码:
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_selection import chi2
THRESHOLD_CHI = 5 # or whatever you like. You may try with
# for threshold_chi in [1,2,3,4,5,6,7,8,9,10] if you prefer
# and measure the f1 scores
X = df['text']
y = df['labels']
cv = CountVectorizer()
cv_sparse_matrix = cv.fit_transform(X)
cv_dense_matrix = cv_sparse_matrix.todense()
chi2_stat, pval = chi2(cv_dense_matrix, y)
chi2_reshaped = chi2_stat.reshape(1,-1)
which_ones_to_keep = chi2_reshaped > THRESHOLD_CHI
which_ones_to_keep = np.repeat(which_ones_to_keep ,axis=0,repeats=which_ones_to_keep.shape[1])
此代码计算卡方检验,应将最佳特征保持在选定的阈值内。 我的问题是如何为卡方测试分数选择阈值?
卡方没有特定的结果范围,所以很难事先确定一个阈值。通常你可以做的是根据变量的 p 值对变量进行排序,逻辑是 p 值越低越好,因为它们意味着特征和目标变量之间的相关性更高(我们想丢弃独立的特征,即不目标变量的预测变量)。在这种情况下,您无论如何都必须决定要保留多少特征,这是一个超参数,您可以手动调整或使用网格搜索更好地调整。
请注意,您可以避免手动执行 selection,sklearn 已经实现了一个函数 SelectKBest 到 select 基于卡方的最佳 k 个特征,您可以使用它如下:
from sklearn.feature_selection import SelectKBest, chi2
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
但如果出于任何原因你想完全依赖原始 chi2 值,你可以计算变量中的最小值和最大值,然后将间隔分成 n 步以通过网格搜索进行测试。