Kaggle-intro-to-machine-learning(2)
Your-first-machine-learning-model
教程
Selecting The Prediction Target
您可以使用点符号提取变量。 此单列存储在Series中,这在很大程度上类似于仅包含一列数据的DataFrame。
我们将使用点表示法选择要预测的列,称为预测目标。 按照惯例,预测目标称为y。 因此,我们需要在墨尔本数据中保存房价的代码是
y = melbourne_data.Price
Choosing "Features"
输入到我们的模型中的列(后来用于进行预测)称为“特征”。 在我们的案例中,这些将是用于确定房屋价格的列。 有时,您会将除目标以外的所有列用作要素。 有时,更少的特征会更好。
目前,我们将仅建立具有几个特征的模型。 稍后,您将看到如何迭代和比较使用不同功能构建的模型。
我们通过在方括号内提供列名称列表来选择多个功能。 该列表中的每个项目都应该是一个字符串(带引号)。
这是一个例子:
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
按照惯例,此数据称为X。
X = melbourne_data[melbourne_features]
让我们使用describe方法和head方法快速查看一下将用于预测房价的数据,该方法显示了前几行。
X.describe()
Output:
X.head()
Output:
使用这些命令直观地检查数据是数据科学家工作的重要组成部分。 您会经常在数据集中发现一些值得进一步检查的惊喜。
Building Your Model
您将使用scikit-learn库创建模型。 编码时,此库以sklearn编写,如示例代码所示。 Scikit-learn很容易成为最受欢迎的库,用于对通常存储在DataFrames中的数据类型进行建模。
建立和使用模型的步骤是:
定义:它将是哪种类型的模型? 决策树? 其他类型的模型? 还指定了模型类型的其他一些参数。
拟合:从提供的数据中捕获模式。 这是建模的核心。
预测:预测
评估:确定模型预测的准确性。
这是一个使用scikit-learn定义决策树模型并将其与功能和目标变量相匹配的示例。
from sklearn.tree import DecisionTreeRegressor # Define model. Specify a number for random_state to ensure same results each run melbourne_model = DecisionTreeRegressor(random_state=1) # Fit model melbourne_model.fit(X, y)
许多机器学习模型在模型训练中允许一些随机性。 为random_state指定一个数字可确保您在每次运行中获得相同的结果。 这被认为是一种好习惯。 您可以使用任何数字,并且模型的质量在很大程度上不会取决于您选择的值。
现在,我们有了一个拟合模型,可以用来进行预测。
实际上,您将要对市场上即将出现的新房子而不是我们已经有价格的房子做出预测。 但是,我们将对训练数据的前几行进行预测,以了解预测函数的工作方式。
print("Making predictions for the following 5 houses:") print(X.head()) print("The predictions are") print(melbourne_model.predict(X.head()))
Output:
这只是一个粗略的模型,更加精细的模型将会在后面的课程了解到
练习
Step 1: Specify Prediction Target
选择与销售价格相对应的目标变量。 将其保存到名为y的新变量中。 您需要打印列的列表以查找所需列的名称。
y = home_data.SalePrice # Check your answer step_1.check()
选择即可
Step 2: Create X
现在,您将创建一个名为X的具有预测功能的DataFrame。
由于只需要原始数据中的某些列,因此首先要创建一个列表,其中包含要在X中使用的列的名称。
您将只使用列表中的以下列(您可以复制并粘贴整个列表以保存一些输入内容,尽管您仍然需要添加引号):
* LotArea * YearBuilt * 1stFlrSF * 2ndFlrSF * FullBath * BedroomAbvGr * TotRmsAbvGrd
创建该功能列表之后,使用它来创建用于拟合模型的DataFrame。
# Create the list of features below feature_names = ["LotArea", "YearBuilt", "1stFlrSF", "2ndFlrSF", "FullBath", "BedroomAbvGr", "TotRmsAbvGrd"] # Select data corresponding to features in feature_names X = home_data[feature_names] # Check your answer step_2.check()
Review Data
在建立模型之前,快速浏览一下X以验证它是否合理
# Review data # print description or statistics from X print(X.describe()) # print the top few lines print(X.head(5))
Output:
Step 3: Specify and Fit Model
创建一个DecisionTreeRegressor并将其保存为iowa_model。 确保已完成从sklearn的相关导入以运行此命令。
然后使用上面保存的X和y中的数据拟合刚刚创建的模型。
from sklearn.tree import DecisionTreeRegressor #specify the model. #For model reproducibility, set a numeric value for random_state when specifying the model iowa_model = DecisionTreeRegressor(random_state=2) # Fit the model iowa_model.fit(X,y) # Check your answer step_3.check()
Step 4: Make Predictions
使用X作为数据,使用模型的预测命令进行预测。 将结果保存到称为predictions的变量中。
predictions = iowa_model.predict(X) print(predictions) # print(y) # Check your answer step_4.check()
Think About Your Results
使用head方法将前几个预测与这些相同房屋的实际房屋价值(以y为单位)进行比较。 有什么惊喜吗?
# You can write code in this cell print(predictions[0:5]) print(y.head(5)) tmp=predictions-y print(tmp)
拟合得非常好,完全一致;但是可能产生过拟合的问题
By convention, this data is called X.