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



在train.csv数据中,泰坦尼克号机器学习项目中,一些乘客的年龄数据丢失,因此Pandas模块将其填充为" 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))

填充NA将NAN值替换为您的写入,因此,如果您编写'',它将是一个空字符串。只需写:

 dataset.fillna(0)

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

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

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

对于第三个选项:

Scikit-learn提供了一个方便的类来照顾缺失的值: 螺母。这是如何使用它。首先,您需要创建一个螺母 实例,指定您要替换每个属性的缺失 该属性中位数的值:

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)

结果是一个包含转换特征的普通型数阵列。如果您想将其放回Pandas DataFrame,这很简单。

nb:您也可以在缩放器之前的管道中添加阀芯。

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

最新更新