机器学习实战:利用随机森林回归树来预测不同经纬度的无线电电磁波

学习笔记,仅供参考!

介绍

Scikit-learn(以前称为scikits.learn,也称为sklearn)是一款免费的机器学习库 。它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度提升,k均值和DBSCAN,本文利用sklearn的RandomForestRegressor模型对无线电电磁波场强做数据预测。

数据集

给出如下图数据示例,这是一个在不同经纬度下的无线电场强数据,X,Y表示经纬度,在这么一个物理地址上去发射88M的无线电电磁波,88000khz表示无线电电磁波,再从原地做一个接收,发现场强衰减了65.9khz,衰减表示可能被周边环境的值所吸收,现在根据已有的数据集,来对不同的场强做预测。
在这里插入图片描述

代码

完整代码在最后,这里对各行代码进行注释,便于理解。

1.由于给出的数据集的x,y值存在相同的情况,需要先对相同的x,y数据进行求和再娶均值,利用pandas里面封装的groupby函数和mean函数进行同类数据求和再取均值:

	#读入数据
    data_prime = pd.read_csv('FieldIntensity.csv', header=0)
    data_group = data_prime.groupby(by=['x', 'y'])  
    data_mean = data_group.mean()
    data = data_mean.reset_index()
    

2.将经纬度数据作为输入x,场强作为输出y,这里选择对93.1M场强来做预测,将数据集随机打乱,再做切分,3/4作为训练集,1/4作为测试集,这里不是一个分类问题,数据有渐变性,用随机森林回归树来训练模型:

RandomForestRegressor函数参数,参考下面地址:
https://wenku.baidu.com/view/edda0dc9fbc75fbfc77da26925c52cc58bd690bf.html

x = data[['x', 'y']]
    y = data['93100KHz']
    # 切分训练集和测试集,训练集占75%,random_state 相当于随机数种子random.seed() ,其作用是相同的
    x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.75, random_state=0)
    # 随机森林回归决策树,树的个数100,选择节点criterion=mse,mae,数的深度14,每个节点的最少样本数3
    model = RandomForestRegressor(n_estimators=100, criterion='squared_error', max_depth=14, min_samples_split=3)
    model.fit(x_train.values, y_train)
    

3.对训练集和测试集做预测,这里先对数据进行了排序,再利用hstack函数对数据在水平方向做堆叠,方便可视化分析结果,易于观看

# 对训练集进行一个排序,目的是使得可视化结果更明白
    order = y_train.argsort(axis=0)  # argsort函数按index每个数据的下标进行排序
    y_train = y_train.values[order]
    x_train = x_train.values[order, :]
    # 训练预测值
    y_train_pred = model.predict(x_train)
    # 测试集
    order = y_test.argsort(axis=0)
    y_test = y_test.values[order]
    x_test = x_test.values[order, :]
    # 测试预测值
    y_test_pred = model.predict(x_test)
    # 按水平方向将x_test, y_test,y_test_pred进行堆叠
    data = np.hstack((x_test, y_test.reshape(-1, 1), y_test_pred.reshape(-1, 1)))
    # 存入DataFrame
    data = pd.DataFrame(data
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值