使用 Python 可视化并构建机器学习模型
介绍
在本系列关于 Python 数据分析的第 1 部分中,我们讨论了数据准备。在本指南中,我们将重点介绍不同的数据可视化和构建机器学习模型。这两个指南都使用了纽约市 Airbnb 开放数据。如果您没有阅读第 1 部分,请查看它以了解我们如何预处理数据。
在本指南结束时,您将获得以下实践经验:
- 数据可视化
- 建立预测模型
让我们开始吧!
可视化
fig = plt.figure(figsize = (15,10))
ax = fig.gca()
data.hist(ax=ax)
plt.show()
labels = data.neighbourhood_group.value_counts().index
colors = ['lightblue','beige','lightgreen','orange','cyan']
explode = [0,0,0,0,0]
sizes = data.neighbourhood_group.value_counts().values
plt.figure(0,figsize = (7,7))
plt.pie(sizes, explode=[0.1,0.0,0.3,0.5,0.0], labels=labels, colors=colors, autopct='%1.1f%%',shadow=True)
plt.title('Neighbourhood Group',color = 'black',fontsize = 15)
plt.show()
#neighbourhood_group-price
result = data.groupby(["neighbourhood_group"])['price'].aggregate(np.median).reset_index().sort_values('price')
sns.barplot(x='neighbourhood_group', y="price", data=data,palette=colors, order=result['neighbourhood_group'])
plt.xticks(rotation=45)
plt.show()
#neighbourhood_group-availability_365
result = data.groupby(["neighbourhood_group"])['availability_365'].aggregate(np.median).reset_index().sort_values('availability_365')
sns.boxplot(x='neighbourhood_group', y="availability_365", data=data)
plt.show()
labels = data.room_type.value_counts().index
colors = ['lightblue','pink','beige']
explode = [0,0,0]
sizes = data.room_type.value_counts().values
plt.figure(0,figsize = (7,7))
plt.pie(sizes, explode=[0,0.05,0.5], labels=labels, colors=colors, autopct='%1.1f%%', shadow=True)
# plot.pie(explode=,autopct='%1.1f%%',ax=ax[0],)
plt.title('Room-Type',color = 'Brown',fontsize = 15)
plt.show()
#room_type-price
result = data.groupby(["room_type"])['price'].aggregate(np.median).reset_index().sort_values('price')
sns.barplot(x='room_type', y="price", data=data, order=result['room_type'])
plt.show()
#room_type-availability_365
result = data.groupby(["room_type"])['availability_365'].aggregate(np.median).reset_index().sort_values('availability_365')
sns.boxplot(x='room_type', y="availability_365", data=data, order=result['room_type'])
plt.show()
sns.lineplot(x='availability_365',y='price',data=data)
plt.show()
plt.figure(figsize=(10,6))
sns.scatterplot(data.longitude,data.latitude,hue=data.neighbourhood_group)
plt.ioff()
plt.figure(figsize=(10,6))
sns.scatterplot(data.longitude,data.latitude,hue=data.availability_365)
plt.ioff()
预测模型
随机森林是一种高级回归器。它使用集成技术进行预测。由许多模型组成的模型称为集成模型。有两种类型:装袋和提升。RFR是一种装袋技术。随机森林中的树是并行运行的。在构建树时,它们不会相互影响。一旦所有树都构建完毕,就会对它们进行投票或平均。
RFR 树如下所示:
为了避免任何浮点型错误,我们将准备用于预测的数据集。
data_pred = pd.read_csv(r'nyc_airbnb\AB_NYC_2019.csv')
#prepare-data
data_pred.drop(['name', 'host_name', 'last_review'], inplace=True, axis=1)
data_pred['reviews_per_month'] = data_pred['reviews_per_month'].fillna(value=0, inplace=False)
正如我们之前看到的,neighborhood_group、neighborhood和room type都是文本形式。我们的模型不会使用文本数据进行预测,以使数据模型易于理解。我们使用sklearn 中的LableEncoder类。
le = preprocessing.LabelEncoder()
le.fit(data_pred['neighbourhood_group'])
data_pred['neighbourhood_group']=le.transform(data_pred['neighbourhood_group'])
le.fit(data_pred['neighbourhood'])
data_pred['neighbourhood']=le.transform(data_pred['neighbourhood'])
le.fit(data_pred['room_type'])
data_pred['room_type']=le.transform(data_pred['room_type'])
predi= random_forest.predict(X_test)
坚持
该模型在训练数据集上进行学习。它包含一个已知输出。我们的模型的预测是在测试数据集上完成的。数据要么按 70:30 的比例分割,要么按 80:20 的比例分割。我们已将此模型的大小设置为 80:20。
我们将使用 R2 分数测试其可靠性。
lm = LinearRegression()
X = data_pred.drop(['price', 'longitude'], inplace=False, axis=1)
y = data_pred['price']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)
lm.fit(X_train, y_train)
predictions = lm.predict(X_test)
# Evaluated-metrics
mae = metrics.mean_absolute_error(y_test, predictions)
mse = metrics.mean_squared_error(y_test, predictions)
rmse = np.sqrt(metrics.mean_squared_error(y_test, predictions))
r2 = metrics.r2_score(y_test, predictions)
print('MAE (Mean-Absolute-Error): %s' %mae)
print('MSE (Mean-Squared-Error): %s' %mse)
print('RMSE (Root-MSE): %s' %rmse)
print('R2 score: %s' %r2)
对于此数据集,保留方法的 R2 分数表现不佳。0.09 不稳定,可能导致数据过度拟合或欠拟合。我们将检查交叉验证方法。但这个问题不是永久性的。我们可以通过在数据子集上多次重复计算来提高分数。
交叉验证(k 倍)
这是一个评估机器学习模型技能的过程。交叉验证 (CV) 有一个参数 K,表示部分/折叠的数量。每个折叠在某个时候用作测试集。一旦过程完成,我们就可以总结和评估矩阵。
from sklearn.model_selection import KFold, GridSearchCV, cross_val_score
from sklearn.ensemble import RandomForestRegressor
我们将使用random_forest()<font sty
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~