【问题标题】:Target and independent variables in random forest随机森林中的目标和自变量
【发布时间】:2017-10-28 08:31:18
【问题描述】:

我想用随机森林算法分析“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)

【问题讨论】:

    标签: python arrays machine-learning random-forest


    【解决方案1】:

    这可能是因为估算器的数量非常少。尝试使用更多的估算器。至少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]
    

    【讨论】:

    • 感谢您的回答! “估计数”是什么意思?这正是重点 - 我想使用超过 3 个功能 - 但我不知道如何在代码方面。
    • 感谢代码!!!不幸的是,它让我: TypeError: '['bathrooms', 'floors', 'bedrooms', 'sqft_living', 'sqft_lot', 'waterfront', 'view', 'condition', 'grade', 'lat', 'sqft_above']' 是无效键。
    • 我展示了如何包含或排除列的示例。查看您的数据框,考虑您要训练的列,然后将它们放入列表中。如我所示过滤数据框,如果您只想要值,那么只需 train.ix[:, train_cols].values
    猜你喜欢
    • 2014-09-19
    • 2017-08-29
    • 1970-01-01
    • 2013-07-25
    • 2017-08-29
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多