Задача машинного обучения Титаника с использованием логистической регрессии

1

Я научный ученый. Я наткнулся на титанический набор данных. Я попытался использовать логистическую регрессию для проблемы. Однако я застреваю, пытаясь подогнать модель логистической регрессии на тренировочный набор. Вот мой код ниже:

#importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

#importing the dataset
Titanic_train = pd.read_csv('train.csv').values
Titanic_test = pd.read_csv('test.csv').values

columns = ['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked']
Titanic_train = pd.DataFrame(Titanic_train, columns = columns )


#splitting the training data into dependent and independent variable
X = Titanic_train.loc[:,['Pclass', 'Sex','Age','SibSp','Parch','Fare']].values
Y = Titanic_train.loc[:, 'Survived'].values

X = pd.DataFrame(Titanic_train, columns = ['Pclass', 'Sex','Age','SibSp','Parch','Fare'])
Y = pd.DataFrame(Titanic_train, columns = ['Survived'])

#working with missing data
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
imputer = imputer.fit(X[['Age']])
X[['Age']] = imputer.transform(X[['Age']])



#dealing with categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
LabelEncoder_X = LabelEncoder()
X['Sex'] = LabelEncoder_X.fit_transform(X['Sex'])

from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, y_test = train_test_split(X,Y,test_size = 0.4, random_state = 0)



from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state = 0)
classifier.fit(X_train, Y_train)


# Predicting the Test set results
y_pred = classifier.predict(X_test)

****** Это ошибка, которую я продолжаю получать:

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py:547: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
  y = column_or_1d(y, warn=True)
Traceback (most recent call last):
  File "<ipython-input-196-c1f2228de316>", line 3, in <module>
    classifier.fit(X_train, Y_train)
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\linear_model\logistic.py", line 1217, in fit
    check_classification_targets(y)
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\multiclass.py", line 172, in check_classification_targets
    raise ValueError("Unknown label type: %r" % y_type)
ValueError: Unknown label type: 'unknown'*****

Как исправить эту ошибку?

  • 0
    Вы можете поделиться X_train.shape, Y_train.shape, X_test.shape, y_test.shape
  • 0
    Вы должны посмотреть на сайте Kaggle, это одна из их вводных проблем с пошаговым руководством и сценариями от других людей.
Показать ещё 1 комментарий
Теги:
pandas
machine-learning
numpy
scikit-learn

1 ответ

1
Лучший ответ

Вам нужно Y.Survived результат Y.Survived чтобы float. Выполняется только следующий код:

Titanic_train = pd.read_csv('train.csv').values
Titanic_test = pd.read_csv('test.csv').values

columns = ['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked']
Titanic_train = pd.DataFrame(Titanic_train, columns = columns )


#splitting the training data into dependent and independent variable
X = Titanic_train.loc[:,['Pclass', 'Sex','Age','SibSp','Parch','Fare']].values
Y = Titanic_train.loc[:, 'Survived'].values

X = pd.DataFrame(Titanic_train, columns = ['Pclass', 'Sex','Age','SibSp','Parch','Fare'])
Y = pd.DataFrame(Titanic_train, columns = ['Survived'])
Y = Y.Survived.astype("float")

#working with missing data
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
imputer = imputer.fit(X[['Age']])
X[['Age']] = imputer.transform(X[['Age']])  

#dealing with categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
LabelEncoder_X = LabelEncoder()
X['Sex'] = LabelEncoder_X.fit_transform(X['Sex'])

from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, y_test = train_test_split(X,Y,test_size = 0.4, random_state = 0)

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state = 0)
classifier.fit(X_train, Y_train)

# Predicting the Test set results
y_pred = classifier.predict(X_test)

Найдите строку:

Y = Y.Survived.astype("float")
  • 0
    Спасибо Сергей .... Это сработало !!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню