2016-04-27 11 views
0

Mein aktueller Datensatz enthält etwa 28.000 Beobachtungen und 35 Merkmale. Meine X-Matrix enthält die ersten 34 Features, meine Matrix enthält das letzte Feature oder das 35. Feature (Ich habe es HighLowMobility im folgenden Code markiert) Ich habe ein neuronales Netzwerk erstellt, um high vs. low, jedoch die Genauigkeit meines Algorithmus zu klassifizieren ist 12% aufgrund fehlender Datenpunkte. Ich stoße auf das Problem, dass einige meiner Features viele Datenpunkte vermissen. Eine Möglichkeit, die ich durchging, war das Ausfüllen des Mittelwerts für die fehlenden Werte. Dies erhöhte die Genauigkeit des Algorithmus auf 56%, aber ich mag die Idee nicht, den Mittelwert für fehlende Werte zu verwenden. Ich möchte einen anderen Ansatz suchenSuche nach einer Lösung für fehlende Werte im Datensatz

#loading the data into data frame 
X = pd.read_csv('raw_data_for_edits.csv') 
#Impute the missing values with mean values,. 
X = X.fillna(X.mean()) 
#Dropping the categorical values 
X = X.drop(['county_name','statename','stateabbrv'],axis=1) 
#Collect the output in y variable 
y = X['HighLowMobility'] 

Ich kann meine gesamte Datensatz, weil es zu groß, aber nicht kopieren und ich die ersten 12 Reihen und 15 Funktionen einfügen:

birthcohort countyfipscode county_name cty_pop2000 statename state_id stateabbrv perm_res_p25_kr24 perm_res_p75_kr24 perm_res_p25_c1823 perm_res_p75_c1823 perm_res_p25_c19 perm_res_p75_c19 perm_res_p25_kr26 perm_res_p75_kr26 
1980 1001 Autauga 43671 Alabama 1 AL 45.29939 60.7061    20.79255 66.0626 40.33072 61.38815 
1981 1001 Autauga 43671 Alabama 1 AL 42.61835 63.21074 29.72325 75.26598 18.54342 54.94438 39.72811 65.40214 
1982 1001 Autauga 43671 Alabama 1 AL 48.26985 62.34378 38.06422 72.25443 21.53552 59.08011 44.65976 63.69386 
1983 1001 Autauga 43671 Alabama 1 AL 42.63371 56.42043 38.25876 80.4664 15.57722 57.13945 40.6005 61.02879 
1984 1001 Autauga 43671 Alabama 1 AL 44.01634 62.27992 38.12383 73.74701 23.0881 55.17943 43.34503 62.40761 
1985 1001 Autauga 43671 Alabama 1 AL 45.71784 61.31874 40.93386 83.06611 25.66557 72.2912 42.42057 62.00612 
1986 1001 Autauga 43671 Alabama 1 AL 47.92037 59.65535 47.48409 72.49103 28.89066 63.85233 42.06915 59.60703 
1987 1001 Autauga 43671 Alabama 1 AL 48.31079 54.04203 53.19901 84.53795 35.28359 71.83407   
1988 1001 Autauga 43671 Alabama 1 AL 47.98552 59.42001 52.89273 85.28442 30.55523 67.43595   
1980 1003 Baldwin 140415 Alabama 1 AL 42.46106 51.41415   19.86316 58.6601 41.89684 55.88935 
1981 1003 Baldwin 140415 Alabama 1 AL 43.00288 55.10138 35.59233 76.98567 11.48056 40.79744 42.46521 57.31494 

Beachten Sie, wie Das Feature "perm_res_p25_c1823" enthält keine Werte. Dies wird hinsichtlich der Genauigkeit meines Algorithmus problematisch. Also, was soll ich tun, soweit fehlende Werte? Ich habe etwas über Interpolation gelesen, würde ich das tun? Wenn ja, wie würde ich es programmieren?

Antwort

0

Eine Möglichkeit, es zu tun ist, einen Prä-Prozessor zu verwenden, empfehle ich scikit-learn, je nach Situation, wird mein Beispiel eine einfache „bedeutet“ Strategie verwenden, um die fehlenden Daten „NaN“, so zu transformieren:

In [1]: import pandas as pd 

In [2]: from sklearn.preprocessing import Imputer 

# df is a copy from your sample data 

In [6]: values = df[['perm_res_p25_kr26', 'perm_res_p75_kr26']].values 

In [7]: values 
Out[7]: 
array([[  nan,  nan], 
     [ 39.72811, 65.40214], 
     [ 44.65976, 63.69386], 
     [ 40.6005 , 61.02879], 
     [ 43.34503, 62.40761], 
     [ 42.42057, 62.00612], 
     [ 42.06915, 59.60703], 
     [  nan,  nan], 
     [  nan,  nan], 
     [  nan,  nan], 
     [ 42.46521, 57.31494]]) 

# use a Imputer simple "mean" strategy to preprocess your missing data 
In [8]: imp = Imputer(missing_values="NaN", strategy="mean", axis=0) 
# simple fit & transform operations 
In [9]: imp.fit(values) 
Out[9]: Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0) 
# assign the missing values back to the dataframe 
In [10]: df.ix[:, 'perm_res_p25_kr26':'perm_res_p75_kr26'] = imp.transform(values) 
# and your missing data is taken care of 
In [12]: df[['perm_res_p25_kr26', 'perm_res_p75_kr26']] 
Out[12]: 
    perm_res_p25_kr26 perm_res_p75_kr26 
0   42.184047   61.637213 
1   39.728110   65.402140 
2   44.659760   63.693860 
3   40.600500   61.028790 
4   43.345030   62.407610 
5   42.420570   62.006120 
6   42.069150   59.607030 
7   42.184047   61.637213 
8   42.184047   61.637213 
9   42.184047   61.637213 
10   42.465210   57.314940 

Dies ist nur eine einfache "gemeine" Strategie (nicht was Sie wollen), aber Sie können mehr darüber aus Preprocessing data - custom-transformers lesen und implementieren Sie Ihre eigene Strategie, um Ihre fehlenden Daten wiederherzustellen.

Hoffe, das hilft.

Verwandte Themen