Sto tentando di applicare un metodo di selezione delle caratteristiche univariate utilizzando il modulo Python scikit-impara a un set di dati di regressione (cioè valori a risposta continua) in formato svmlight.Scikit: consente di selezionare la funzione per i dati di regressione
Sto lavorando con scikit-learn versione 0.11.
Ho provato due approcci - il primo dei quali fallito e il secondo dei quali ha funzionato per il set di dati del mio giocattolo, ma credo avrebbe dato risultati privi di significato per un set di dati reale.
Desidero ricevere suggerimenti su un approccio di selezione delle caratteristiche univariata appropriato che potrei applicare per selezionare le principali funzionalità N per un set di dati di regressione. Vorrei entrambi (a) capire come far funzionare la funzione f_regression o (b) ascoltare suggerimenti alternativi.
I due approcci sopra menzionati:
- Ho provato ad utilizzare sklearn.feature_selection.f_regression (X, Y).
Questo non è riuscita con il seguente messaggio di errore: "TypeError: copy() prende esattamente 1 argomento (2 dato)"
- Ho provato ad utilizzare Chi2 (X, Y). Questo "ha funzionato" ma sospetto che ciò sia dovuto al fatto che i due valori di risposta 0.1 e 1.8 nel set di dati del mio giocattolo venivano trattati come etichette di classe? Presumibilmente, ciò non produrrebbe una statistica chi-quadro significativa per un set di dati reale per il quale ci sarebbe un gran numero di possibili valori di risposta e il numero in ogni cella [con un particolare valore di risposta e valore per l'attributo sottoposto a test] sarebbe Basso?
Si prega di trovare il mio dataset giocattolo incollato alla fine di questo messaggio.
Il seguente frammento di codice dovrebbe fornire i risultati che ho descritto sopra.
from sklearn.datasets import load_svmlight_file
X_train_data, Y_train_data = load_svmlight_file(svmlight_format_train_file) #i.e. change this to the name of my toy dataset file
from sklearn.feature_selection import SelectKBest
featureSelector = SelectKBest(score_func="one of the two functions I refer to above",k=2) #sorry, I hope this message is clear
featureSelector.fit(X_train_data,Y_train_data)
print [1+zero_based_index for zero_based_index in list(featureSelector.get_support(indices=True))] #This should print the indices of the top 2 features
Grazie in anticipo.
Richard
contenuto del mio file di svmlight artificiosa - con righe vuote supplementari inseriti per chiarezza:
1.8 1: 1.000000 2: 1.000000 4: 1.000000 6: 1.000000 # mA
1.8 1: 1.000000 2: 1.000000 # mB
0,1 5: 1.000000 # mC
1,8 1: 1.000000 2: 1.000000 # mD
0.123.516,41 mila0,1 3: 1.000000 4: 1.000000 # mE
0,1 3: 1.000000 # mF
1,8 2: 1.000000 4: 1.000000 5: 1.000000 6: 1.000000 # mG
1,8 2: 1.000000 # mH
'chi2' è solo per la classificazione. Per farlo funzionare in un'impostazione di regressione, devi bin i tuoi valori Y. –
Grazie Larsmans. Ho pensato che fosse il caso, ma stavo ipotizzando che chi2 potesse internamente distribuire valori di regressione y "dietro le quinte". Mi rendo conto che la mia attuale installazione di scikit-learn è vecchia, quindi proverò f_regression con l'ultima versione prima di sollevare nuovamente il problema. – user1735732