【问题标题】:How do I use Decision Tree Regressor on new data? (Python, Pandas, Sklearn)如何在新数据上使用决策树回归器? (Python、熊猫、Sklearn)
【发布时间】:2020-05-13 03:37:43
【问题描述】:

我最近开始学习 python 和机器学习。我一直在做一个涉及房价的基本决策树回归示例。所以我已经训练了算法并找到了最好的分支数量,但是我如何在新数据上使用它呢?

我有以下列,我的目标值是'SalePrice'

['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']

显然,对于原始数据,我已经有了 SalePrice,所以我可以比较这些值。如果我只有上面的列,我将如何查找价格?

完整代码如下

import pandas as pd
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor


# Path of the file to read
iowa_file_path = 'train.csv'

home_data = pd.read_csv(iowa_file_path)
#Simplify data to remove useless info
SimpleTable=home_data[['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd','SalePrice']]
# Create target object and call it y # input target value
y = home_data.SalePrice 
# Create X input columns names to be analysed
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
X = home_data[features]

# Split into validation and training data
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=0, test_size=0.8, train_size=0.2)


# Specify Model
iowa_model = DecisionTreeRegressor(random_state=0)
# Fit Model
iowa_model.fit(train_X, train_y)

# Make validation predictions and calculate mean absolute error
val_predictions = iowa_model.predict(val_X)

val_mae = mean_absolute_error(val_predictions, val_y)
print("Validation MAE: {:,.0f}".format(val_mae))


def get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y):
    model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes, random_state=0)
    model.fit(train_X, train_y)
    preds_val = model.predict(val_X)
    mae = mean_absolute_error(val_y, preds_val)
    return(mae)

# to find best number of leaves
candidate_max_leaf_nodes = [10, 20, 50, 100, 200, 400] # start with big numbers are work your way down
for max_leaf_nodes in candidate_max_leaf_nodes:
    my_mae=get_mae(max_leaf_nodes,train_X,val_X,train_y,val_y)
    print("MAX leaf nodes: %d \t\t Mean Absolute Error:%d" %(max_leaf_nodes,my_mae))




scores = {leaf_size: get_mae(leaf_size, train_X, val_X, train_y, val_y) for leaf_size in candidate_max_leaf_nodes}

best_tree_size = min(scores, key=scores.get)
print(best_tree_size)


#run on all data and put back into data fram 
final_model=DecisionTreeRegressor(max_leaf_nodes=best_tree_size,random_state=0)
final_model.fit(X,y)
final_model.predict(X)

final_predictions = final_model.predict(X)
finaltableinput = {'Predicted_Price':final_predictions}
finaltable = pd.DataFrame(finaltableinput)
SimpleTable.head()

jointable = SimpleTable.join(finaltable)

#export data with predicted values to csv
jointable.to_csv('newdata4.csv')




提前致谢

【问题讨论】:

    标签: python pandas machine-learning sklearn-pandas


    【解决方案1】:

    如果您想知道给定已训练模型的自变量 (X) 的价格 (Y),则需要使用 predict() 方法。这意味着,根据您的算法在训练中开发的模型,它将使用变量来预测SalePrice。我看到您已经在代码中使用了.predict()

    你应该从定义变量开始,例如:

    X_new = df_new[['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']] #Let's say this is a pandas dataframe
    new_sale_price = final_model.predict(X_new) #This will return an array
    df_new['SalePrice'] = new_sale_price #The length will be of equal length so you should have no trouble.
    

    你也可以这样做:

    df_new['SalePrice'] = final_model.predict(X_new) 
    

    当然,由于您不知道X 的值的真实 SalePrice,因此您无法进行性能检查。这就是现实世界中发生的情况,每当您想根据一组变量进行价格预测或预测时,您需要训练您的模型以实现其最佳性能,然后使用它进行预测!如果您有任何疑问,请随时在 cmets 中留下任何问题。

    【讨论】:

    • 很高兴能帮上忙!随意接受我的回答,这会将问题标记为已回答并帮助我提高声誉:)
    【解决方案2】:

    决策树算法是一种监督学习模型,这意味着为了训练它,您必须向模型提供特征以及目标(在您的情况下为“销售价格”)。

    如果您想在没有目标数据的情况下应用机器学习,则必须使用无监督模型。

    可以在here 找到这些不同类型的学习模型的非常基本的介绍。

    【讨论】:

    • 感谢您的帮助,但我的意思是使用对训练数据的分析来预测新数据。现在已经回答了。
    猜你喜欢
    • 2020-03-03
    • 1970-01-01
    • 2017-11-24
    • 2020-02-17
    • 1970-01-01
    • 2021-12-25
    • 2018-09-06
    • 2018-04-30
    • 2018-06-23
    相关资源
    最近更新 更多