Python 在Titanic Machine Learning train.csv中处理空数据点

Python 在Titanic Machine Learning train.csv中处理空数据点,python,csv,machine-learning,scikit-learn,svm,Python,Csv,Machine Learning,Scikit Learn,Svm,在泰坦尼克号机器学习项目中的train.csv数据中,一些乘客的年龄数据丢失,因此熊猫模块将其填写为“NaN”,当将其输入sklearn算法时,它不接受该数据。我尝试了dataset.fillna(“”),但现在它变成了一个空字符串,而不是一个浮点。请派人来帮忙 fillna将Nan值替换为您编写的值,因此如果您编写“”,它将是一个空字符串。只要写下: dataset.fillna(0) 如果您需要区分0和Nan,您可以尝试将其替换为-1,这就是我们所做的。在机器学习项目中,您可以使用许多

在泰坦尼克号机器学习项目中的train.csv数据中,一些乘客的年龄数据丢失,因此熊猫模块将其填写为“NaN”,当将其输入sklearn算法时,它不接受该数据。我尝试了dataset.fillna(“”),但现在它变成了一个空字符串,而不是一个浮点。请派人来帮忙


fillna将Nan值替换为您编写的值,因此如果您编写“”,它将是一个空字符串。只要写下:

 dataset.fillna(0)

如果您需要区分0和Nan,您可以尝试将其替换为-1,这就是我们所做的。

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

  • 删除所有缺少值的列
  • 删除包含缺少值的行
  • 将值设置为某个值(零、平均值、中值等)
  • 对于第三种选择:

    Scikit Learn提供了一个方便的类来处理缺少的值: 责难者。下面是如何使用它。首先,您需要创建一个插补器 实例,指定要替换每个缺少的属性 具有该属性中值的值:

    结果是一个包含变换特征的普通Numpy数组。如果你想把它放回一个 熊猫数据框,很简单

    注意:您也可以在定标器之前的管道中添加插补器

    pipeline = make_pipeline(Imputer(strategy="median"),
                             StandardScaler(),
                             svm.SVC(kernel='rbf',C=0.1))
    

    但是算法不会把0作为一个连续值吗?我希望这个年龄是空的,什么都没有。但算法会接受它作为真实数据。据我所知,没有办法给sklearn算法空值。我有一种情况,我在一次考试中得到了分数,当然,在0分或Nan分之间存在差异,这意味着他没有参加考试。我们尝试了两种方法来解决这个问题:如果测试分数是一个主要特征,那么你可以将人群分成参加测试的人和没有参加测试的人。如果在我的例子中,这是一个小特性,我们通过给它一个不同于其他值的-1来处理它,它工作得很好,但可能会有所不同,这取决于您的算法。另一种方法是用列替换Nanaverage@5Volts您需要按照Drza的建议估算Nan值。有各种各样的技术可以做到这一点。scikit learn包含一个或您可以完全删除该列。您需要测试什么最适合您。StandardScaler将使用Nan值抛出错误。输入者应该排在第一位。是的,你是对的@VivekKumar,我只是改变了顺序并编辑了我的答案;让我知道如何改进它
    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)
    
    pipeline = make_pipeline(Imputer(strategy="median"),
                             StandardScaler(),
                             svm.SVC(kernel='rbf',C=0.1))