SelectKBest дает оценки в виде значений нан - PullRequest
4 голосов
/ 02 мая 2019

У меня есть набор данных, и я пытаюсь получить значения функций, используя SelectKBest и Chi2, но SelectKBest дает оценки функций как nan.

Файл данных и файл кода присутствуют в this link

# Path to the data file
file_path = r"D:\Data_Sets\Mobile_Prices\data.csv"

# Reading the data from the Southern Second Order file, and also passing the column names to south_data data frame
south_data = pd.read_csv(file_path)


# Printing the number of data points and the number of columns of south_data data frame
print("The number of data points in the data  :", south_data.shape[0])
print("The features of the data :", south_data.shape[1])

# Printing the head of south_data data frame
print(south_data.head())

# Check for the nulls
print(south_data.isnull().sum())

# Separate the x and y
x = south_data.drop("tss", axis = 1)
y = south_data["tss"]

# Find the scores of features
bestfit = SelectKBest(score_func=chi2, k=5)
features = bestfit.fit(x,y)
x_new = features.transform(x)

print(features.scores_)

# The output of features.scores_ is displayed as
# array([nan, nan, nan, nan, nan, nan, nan, nan, nan])

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

Все значения в вашей целевой переменной 1. Это причина для nan значений в вашем scores_. Поэтому, пожалуйста, проверьте вашу целевую переменную.

Только для иллюстрации:

>>> from sklearn.datasets import load_digits
import numpy as np
>>> from sklearn.feature_selection import SelectKBest, chi2
>>> X, y = load_digits(return_X_y=True)
>>> X.shape
(1797, 64)
>>> feature_selector = SelectKBest(chi2, k=20)
>>> X_new = feature_selector.fit_transform(X, np.ones(len(X)) )
>>> feature_selector.scores_
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]) 
1 голос
/ 02 мая 2019

'bestfit' - это объект, и вам не нужно присваивать ему переменную при вызове метода fit.Попробуйте:

# Find the scores of features
bestfit = SelectKBest(score_func=chi2, k=5)
bestfit.fit(x,y)
x_new = bestfit.transform(x)
print(bestfit.scores_)

В качестве альтернативы, вы можете вызвать соответствие и преобразование одновременно:

# Find the scores of features
bestfit = SelectKBest(score_func=chi2, k=5)
x_new = bestfit.fit_transform(x)
print(bestfit.scores_)

Решает ли это вашу проблему?

...