Я пытался научиться машинному обучению, но не могу понять, как применить алгоритмы к тестовым данным.В этом примере, над которым я работал, я пытался применить модель логистической регрессии, которая использовалась в обучающих данных, к новому набору тестовых данных.Два набора данных входят в два разных файла CSV: titanic_train.csv и titanic_test.csv.я могу применить модель к данным поезда, но не могу применить ее к тестовым данным.
Я использую модель, используя ноутбук Anaconda Jupiter и python 3.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#this where i load the data
train = pd.read_csv('titanic_train.csv')
test = pd.read_csv('titanic_test.csv')
#impute age
def impute_age(cols):
Age = cols[0]
Pclass = cols[1]
if pd.isnull(Age):
if Pclass == 1:
return 37
elif Pclass == 2:
return 29
else:
return 24
else:
return Age
def convert_data(dataset):
temp_data = dataset.copy()
temp_data['Age'] = temp_data[['Age','Pclass']].apply(impute_age,axis=1)
sex = pd.get_dummies(temp_data['Sex'],drop_first=True)
embark = pd.get_dummies(temp_data['Embarked'],drop_first=True)
temp_data.drop(['Sex','Embarked','Name','Ticket'],axis=1,inplace=True)
temp_data = pd.concat([temp_data,sex,embark],axis=1)
temp_data.drop('Cabin',axis=1,inplace=True)
temp_data.dropna(inplace=True)
return temp_data
train_dataset = convert_data(train) # titanic_train.csv
test_dataset = convert_data(test) # titanic_test.csv
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test =
train_test_split(train.drop('Survived',axis=1),
train['Survived'], test_size=0.30,
random_state=101)
#next is the logistic regression
from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression()
logmodel.fit(X_train,y_train)
# i then get an error
#ValueError: could not convert string to float: 'S'
#i changed train.drop to train_dataset.drop and then passed it into the model ie this
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test =
train_test_split(train_dataset.drop('Survived',axis=1),
train['Survived'],
test_size=0.30,
random_state=101)
from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression()
logmodel.fit(X_train,y_train)
#output was:
#LogisticRegression(C=1.0, class_weight=None, dual=False,
#fit_intercept=True,
# intercept_scaling=1, max_iter=100, multi_class='warn',
# n_jobs=None, penalty='l2', random_state=None, solver='warn',
# tol=0.0001, verbose=0, warm_start=False)
#then i tried your code
predictions = logmodel.predict(test.drop('Survived', axis = 1))
#this then gives me the report
from sklearn.metrics import classification_report
print(classification_report(test['Survived'],predictions))
#and get the error KeyError: "['Survived'] not found in axis"
#so i tried changing it
predictions = logmodel.predict(test_dataset)
from sklearn.metrics import classification_report
print(classification_report(test['Survived'],predictions))
#and got a new error: KeyError: 'Survived'
, просто чтобы разобратьсяпри любой путанице я печатал столбцы в поезде и тестовые данные
print (train.columns)
print (test.columns)
#Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
dtype='object')
#Index(['PassengerId', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch',
'Ticket', 'Fare', 'Cabin', 'Embarked'],
dtype='object')
я хочу иметь возможность применить модель к новым данным, найденным в другом файле titanic_test.csv