随机森林中的目标和自变量

时间:2017-10-28 08:31:19

标签: python arrays machine-learning random-forest

我想分析一下" 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)

1 个答案:

答案 0 :(得分:0)

这可能是因为估算人数很少。尝试使用更多估算器。至少100以上。除此之外,即使随机森林被用于回归,它也不是一个好的技术,因为它会将结果从树中平均出来,并且具有特定的水平,它会产生结果,如水桶。您可以尝试对此类数据集进行线性回归。 我还可以看到您在训练和测试中使用了3个功能。您可能更愿意使用它们,或者至少使用它们中的大多数。

随机森林仍然是一种很好的技术,请尝试增加估算器的数量。您还可以尝试从现有数据中制作一些新功能,例如:房子的总面积,但加上所有的平方英尺。列。

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]