Перекрестная проверка в случайном лесу с использованием анаконды - PullRequest
0 голосов
/ 29 октября 2018

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

import numpy as np 
import pandas as pd 
from sklearn.ensemble import RandomForestClassifier
from sklearn import cross_validation
import matplotlib.pyplot as plt
%matplotlib inline

data=pd.read_csv("C:\\Users\\kabala\\Downloads\\Titanic.csv")
data.isnull().any()
data["Age"]=data1["Age"].fillna(data1["Age"].median())
data["PClass"]=data["PClass"].fillna("3rd")
data["PClass"].isnull().any()
data1.isnull().any()
pd.get_dummies(data.Sex)
# choosing the predictive variables 
x=data[["PClass","Age","Sex"]]
# the target variable is y 
y=data["Survived"]
modelrandom=RandomForestClassifier(max_depth=3)
modelrandom=cross_validation.cross_val_score(modelrandom,x,y,cv=5)

Но я продолжаю получать эту ошибку:

ValueError: could not convert string to float: 'female'

и я не понимаю, в чем проблема, потому что я изменил функцию секса на пустышку

Спасибо:)

1 Ответ

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

pd.get_dummies возвращает фрейм данных и не выполняет операцию на месте. Поэтому вы действительно отправляете сообщение с колонкой sex.

Так что вам нужно что-то вроде X = pd.get_dummies(data[['Sex','PClass','Age']], columns=['Sex','PClass']), и это должно решить вашу проблему. Я думаю, PClass также будет строковым столбцом, вам нужно использовать фиктивные переменные, так как он заполняет '3rd'.

Есть еще несколько мест, где вы звоните data.isnull().any(), которые ничего не делают с базовым фреймом данных. Я оставил их такими, какие они есть, но, к вашему сведению, они могут делать не то, что вы хотели.

Полный код будет:

import numpy as np 
import pandas as pd 
from sklearn.ensemble import RandomForestClassifier
from sklearn import cross_validation
import matplotlib.pyplot as plt
%matplotlib inline

data=pd.read_csv("C:\\Users\\kabala\\Downloads\\Titanic.csv")
data.isnull().any()   <-----Beware this is not doing anything to the data
data["Age"]=data1["Age"].fillna(data1["Age"].median())
data["PClass"]=data["PClass"].fillna("3rd")
data["PClass"].isnull().any()  <-----Beware this is not doing anything to the data
data1.isnull().any() <-----Beware this is not doing anything to the data

#********Fix for your code*******
X = pd.get_dummies(data[['Sex','PClass','Age']], columns=['Sex','PClass'])

# choosing the predictive variables 
# x=data[["PClass","Age","Sex"]]
# the target variable is y 
y=data["Survived"]
modelrandom=RandomForestClassifier(max_depth=3)
modelrandom=cross_validation.cross_val_score(modelrandom,x,y,cv=5)
...