在泰坦尼克号机器学习项目的train.csv数据中,一些乘客的年龄数据丢失,因此大熊猫模块将其填入“NaN”,并且在将其输入sklearn算法时,它不接受它。我尝试了dataset.fillna(''),但现在它变成了一个空字符串而不是浮点数。请发送帮助。
https://www.kaggle.com/c/titanic/data
import pandas as pd
from sklearn.cross_validation import train_test_split
dataset = pd.read_csv('train.csv')
#dataset = dataset.fillna()
def preprocess(df):
from sklearn.preprocessing import LabelEncoder
processed_df = df.copy()
le = LabelEncoder()
done = le.fit_transform(processed_df)
return done
survival = preprocess(dataset.Survived)
data = dataset.drop('Survived',axis= 1)
data = data.drop('PassengerId',axis=1)
data = data.drop('Embarked',axis = 1)
data = data.drop('Cabin',axis = 1)
data = data.drop('Fare',axis = 1)
data = data.drop('Ticket',axis = 1)
data = data.drop('Name',axis=1)
x_train,x_test,y_train,y_test=
train_test_split(data,survival,test_size=0.25,random_state=0)
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn import svm
from sklearn.metrics import accuracy_score
pipeline = make_pipeline(StandardScaler(),
svm.SVC(kernel='rbf',C=0.1))
pipeline.fit(x_train,y_train)
print(accuracy_score(pipeline.predict(x_test),y_test))
fillna用你写的东西替换Nan值,所以如果你写'',它将是一个空字符串。写吧:
dataset.fillna(0)
如果你需要区分0和Nan,你可以尝试用-1替换它,这就是我们所做的。
您可以使用许多方法来处理机器学习项目中的缺失值:
对于第三种选择:
Scikit-Learn提供了一个方便的课程来处理缺失值:Imputer。以下是如何使用它。首先,您需要创建一个Imputer实例,指定您要将每个属性的缺失值替换为该属性的中位数:
from sklearn.preprocessing import Imputer
imputer = Imputer(strategy="median") #or mean as you want
x_train = imputer.fit_transform(x_train)
x_test = imputer.fit_transform(x_test)
结果是一个包含转换特征的普通Numpy数组。如果你想把它放回到Pandas DataFrame中,那很简单。
注意:您也可以在缩放器之前添加管道中的imputer。
pipeline = make_pipeline(Imputer(strategy="median"),
StandardScaler(),
svm.SVC(kernel='rbf',C=0.1))