Решение Титанического машинного обучения Каггла - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь решить Титаник Каггла с помощью Python.Но у меня ошибка при попытке подгонки моих данных.Это мой код:

import pandas as pd
from sklearn import linear_model

def clean_data(data):
    data["Fare"] = data["Fare"].fillna(data["Fare"].dropna().median())
    data["Age"] = data["Age"].fillna(data["Age"].dropna().median())

    data.loc[data["Sex"] == "male", "Sex"] = 0
    data.loc[data["Sex"] == "female", "Sex"] = 1

    data.loc["Embarked"] = data["Embarked"].fillna("S")
    data.loc[data["Embarked"] == "S", "Embarked"] = 0
    data.loc[data["Embarked"] == "C", "Embarked"] = 1
    data.loc[data["Embarked"] == "Q", "Embarked"] = 2

train = pd.read_csv("train.csv")

clean_data(train)

target = train["Survived"].values
features = train[["Pclass", "Age","Sex","SibSp", "Parch"]].values

classifier = linear_model.LogisticRegression()
classifier_ = classifier.fit(features, target) # Here is where error comes from

И ошибка такова:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

Можете ли вы помочь мне, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Вы должны сбросить индекс вашего фрейма данных перед запуском любого кода sklearn:

df = df.reset_index()

0 голосов
/ 04 марта 2019

Nan просто представляет пустые, нулевые или нулевые значения в наборе данных.Перед применением некоторого алгоритма ML к набору данных вам, во-первых, необходимо предварительно обработать набор данных для его упрощенной обработки.Другими словами это называется очисткой данных.Вы можете использовать модуль imputer scikit learn для обработки Nan.

Как проверить, имеет ли набор данных Nan :
dataframe's isnan() возвращает список значений True / False, чтобы показать, есть ли некоторыестолбец содержит Nan или нет
, например:

  str = pd.Series(['a','b',np.nan, 'c', 'np.nan'])
  str.isnull()
  out: False, False, True, False, True


И str.isnull().sum() вернет вам количество нулевых значений, присутствующих в серии.В этом случае «2».Вы можете применить этот метод к самому фрейму данных, например df.isnan()

Два известных мне метода для обработки Nan :
1.Удаление строки, содержащей Nan.
, например str.dropna() или str.dropna(inplace=True) или df.dropna(how=all)
Но это приведет к удалению многих ценных данных из набора данных.Следовательно, в основном мы этого избегаем.
2.Импутация: замена значений Nan на среднее значение / медиану столбца.

 from sklearn.preprocessing import Imputer
 imputer = Imputer(missing_values='NaN', strategy='mean', axis=0) 
 #strategy can also be median or most_frequent 
 imputer = imputer.fit(training_data_df)
 imputed_data = imputer.fit_transform(training_data_df.values)
 print(imputed_data_df)

Надеюсь, это поможет вам.

0 голосов
/ 04 октября 2018

Перед тем, как установить модель с объектами и целью, рекомендуется проверить, присутствует ли значение NULL во всех функциях, которые вы хотите использовать при построении модели.Вы можете узнать ниже, чтобы проверить это

dataframe_name.isnull (). Any () это даст имена столбцов и True, если присутствует хотя бы одно значение Nan

dataframe_name.isnull (). Sum () это даст имена столбцов и значение количества присутствующих значений NaN

Зная имена столбцов, вы выполняетеочистка данных.Это не создаст проблему NaN.

...