2017-10-28 298 views
0

早上好Stackoverflow社区!随机森林中的目标和独立变量(Python)

我想用随机森林算法分析“House Sales in King County”。到目前为止,我设法加载数据,准备数据 - 但我很努力选择正确的目标和自变量。

我的目标是,从数据集中选择所有变量作为输入变量,目标变量应该是价格。

我的代码(见下文)现在可以正常工作,但甚至没有接近我的目标(通过不同的变量预测价格)。我尝试了几种不同的方法 - 但一切都以错误结束(如:标签数量= 17与样本数量= 15128不匹配)。

这将是巨大的,如果有人可以帮助我解决这个问题:-)

# Load Libraries 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.metrics import roc_auc_score 
from sklearn.cross_validation import train_test_split 
import pandas as pd 



dataset= pd.read_csv('kc_house_data.csv') 


dataset = dataset.drop('id', axis=1) 
dataset = dataset.drop('date', axis=1) 
dataset = dataset.drop('zipcode', axis=1) 
dataset = dataset.drop('long', axis=1) 


cols = ['price', 'bathrooms', 'floors', 'bedrooms', 'sqft_living', 'sqft_lot', 'waterfront', 'view', 'condition', 'grade', 'lat', 'sqft_above'] 
dataset[cols] = dataset[cols].applymap(np.int64) 

print(dataset.shape) 
print(dataset.dtypes) 


# Splitting Dataset 
Train,Test = train_test_split(dataset, test_size = 0.3, random_state = 176) 

Train_IndepentVars = Train.values[:, 3:5] 
Train_TargetVar = Train.values[:,5] 
Test_IndepentVars = Test.values[:, 3:5] 
Test_TargetVar = Test.values[:,5] 

##RF 
main=['view', 'bedrooms', 'floors', 'grade'] 
rf_model = RandomForestClassifier(max_depth=30,n_estimators=15) 
rf_model.fit(Train_IndepentVars, Train_TargetVar) 

predictions = rf_model.predict(Train_IndepentVars) 




###Confusion Matrix 

from sklearn.metrics import confusion_matrix 
# Confusion Matrix 
print(" Confusion matrix ", confusion_matrix(Train_TargetVar, predictions)) 


importance = rf_model.feature_importances_ 
importance = pd.DataFrame(importance, index=Train.columns[3:5], 
          columns=["Importance"]) 

print(importance) 

回答

0

这可能是因为估计是相当低的数目。尝试使用更多估算器。至少有100多个东西。除此之外,尽管随机森林被用于回归,但它并不是一项很好的技术,因为它可以将结果从树中平均出来,并且具有特定的结果级别,如桶。您可以尝试对这种数据集进行线性回归。 我还可以看到您在训练和测试中使用了3个功能。你可以使用所有这些,或者至少大部分。

随机森林仍然是一个很好的技术,请尝试增加估计器的数量。您也可以尝试从现有数据中提取一些新功能,例如房子的总面积,但增加了所有sq.ft.列。

train_cols = ['bathrooms', 'floors', 'bedrooms', 'sqft_living', 'sqft_lot', 'waterfront', 'view', 'condition', 'grade', 'lat', 'sqft_above'] 
label = 'price' 
X_train = train.ix[:, train_cols] 
X_test = test.ix[: train_cols] 
y_train = train.ix[:, label] 
y_test = test.ix[:, label] 
+0

感谢您的回答! “估算人数”是什么意思?这正是关键 - 我想使用3个以上的功能 - 但我不知道代码如何。 –

+0

我编辑了我的答案。请看看。 – pissall

+0

感谢您的代码!不幸的是,它得到我:TypeError:'['浴室','地板','卧室','sqft_living','sqft_lot','waterfront','view','condition','grade','lat', 'sqft_above']'是无效的密钥。 –