处理泰坦尼克号机器学习train.csv中的空数据点

问题描述 投票:1回答:2

在泰坦尼克号机器学习项目的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))
python csv machine-learning scikit-learn svm
2个回答
0
投票

fillna用你写的东西替换Nan值,所以如果你写'',它将是一个空字符串。写吧:

 dataset.fillna(0)

如果你需要区分0和Nan,你可以尝试用-1替换它,这就是我们所做的。


0
投票

您可以使用许多方法来处理机器学习项目中的缺失值:

  1. 删除所有缺少值的列
  2. 删除包含缺失值的行
  3. 将值设置为某个值(零,平均值,中位数等)。

对于第三种选择:

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))
© www.soinside.com 2019 - 2024. All rights reserved.