2020-11-15

练习---工业蒸汽量预测

赛题链接:https://tianchi.aliyun.com/competition/entrance/231693/introduction

       之前一段时间学习了唐宇迪老师的机器学习,感觉掌握得不是很好,想那这道题练习一下,在做之前也参考了网上多位大佬的做法,运行时遇到的问题暂时还没想到解决的办法。

一、整体思路:

       从官网拿到训练集和测试集,数据已经做了处理,V0~V37是38个特征属性,target为目标属性。

       先对数据进行预处理,剔除一些不相关的特征,然后对训练集进行数据划分,划分为新的训练集和测试集,分别对新的训练集和测试集进行模型分析,最后根据分析结果做出简单调参。

二、具体步骤

 

2.1 导库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from pandas import DataFrame
%matplotlib inline

2.2 导入数据,观察数据

train=pd.read_table('F:/机器学习/zhengqi_train.txt')
test_x=pd.read_table('F:/机器学习/zhengqi_test.txt')
train.head()

结果:

 V0V1V2V3V4V5V6V7V8V9...V29V30V31V32V33V34V35V36V37target
00.5660.016-0.1430.4070.452-0.901-1.812-2.360-0.436-2.114...0.1360.109-0.6150.327-4.627-4.789-5.101-2.608-3.5080.175
10.9680.4370.0660.5660.194-0.893-1.566-2.3600.332-2.114...-0.1280.1240.0320.600-0.8430.1600.364-0.335-0.7300.676
21.0130.5680.2350.3700.112-0.797-1.367-2.3600.396-2.114...-0.0090.3610.277-0.116-0.8430.1600.3640.765-0.5890.633
30.7330.3680.2830.1650.599-0.679-1.200-2.0860.403-2.114...0.0150.4170.2790.603-0.843-0.0650.3640.333-0.1120.206
40.6840.6380.2600.2090.337-0.454-1.073-2.0860.314-2.114...0.1831.0780.3280.418-0.843-0.2150.364-0.280-0.0280.384

5 rows × 39 columns

2.3 检查缺省值

#缺失值检查
train.isnull().sum()
V0        0
V1        0
V2        0
V3        0
V4        0
V5        0
V6        0
V7        0
V8        0
V9        0
V10       0
V11       0
V12       0
V13       0
V14       0
V15       0
V16       0
V17       0
V18       0
V19       0
V20       0
V21       0
V22       0
V23       0
V24       0
V25       0
V26       0
V27       0
V28       0
V29       0
V30       0
V31       0
V32       0
V33       0
V34       0
V35       0
V36       0
V37       0
target    0
dtype: int64

2.4 画出训练集与测试集的数据分布情况

#观察测试集与训练集的分布
train_x=train.drop(columns=['target'])
train_y=train['target']
sns.distplot(train_y)
plt.show()
for c in train_x.columns:
    sns.distplot(train_x[c])
    sns.distplot(test_x[c])
    plt.show()

由图可看出,'V5', 'V9' , 'V11' , 'V14' , 'V17' , 'V19' , 'V20' , 'V21 ', 'V22' , 'V28' 这些特征差异较大,因此剔除这些特征。

train_x=train_x.drop(['V5', 'V9' , 'V11' , 'V14','V17','V19','V20','V21','V22', 'V28'], axis=1)
test_x=test_x.drop(['V5', 'V9' , 'V11' , 'V14','V17','V19','V20','V21','V22', 'V28'], axis=1)

2.5 相关性检测

这里预留相关性系数大于0.5的值。

corr = train.drop('target', axis=1).corrwith(train.target)
corr = corr[np.abs(corr) >= 0.5]
print(corr)
V0     0.873212
V1     0.871846
V2     0.638878
V3     0.512074
V4     0.603984
V8     0.831904
V12    0.594189
V16    0.536748
V27    0.812585
V31    0.750297
V37   -0.565795
dtype: float64

2.6 划分数据

# 将数据划分为训练集与测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(train_x,train_y, test_size = 0.25, random_state = 0)

2.7 特征归一化处理

使数据范围得到统一,同时能加快运行速度,得到的结果精确度更高。

#特征归一化处理
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)

2.8 模型选择

在借鉴了各位大佬的模型后,决定使用随机森林算法。

随机森林算法的优点:

  •  每棵树随机选择样本并随机选择特征,使得具有很好的抗噪能力,性能稳定;
  •  每棵树都选择部分样本及部分特征,一定程度避免过拟合;
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators=50)
model.fit(x_train, y_train)
print("随机森林训练集的分数为:",model.score(x_train, y_train))
print("随机森林测试集的分数为:",model.score(x_test, y_test))

结果:

随机森林训练集的分数为: 0.9821838347924899
随机森林测试集的分数为: 0.8710006940490087

可见,在训练集的表现很不错,在测试集表现还好吧。

2.9 输出结果

test_y_pred=model.predict(test_x)
result=pd.DataFrame(test_y_pred)
result.to_csv('F:/机器学习/zhengqi_test_y.txt',index=False,header=False)

三、总结

这个分数不高,还有一些需要改进的地方,比如对于特征的处理还不够,模型上也没有选择多个模型进行对比,最后水平还不够,没能进行模型调优。

我想在下次对此进行相应的改进。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个 SQL 语句,用于向借阅表中插入数据。该表包含以下字段:借阅编号、读者编号、书籍编号、借阅日期、归还日期、借阅状态。每条数据表示一次借阅记录。其中借阅编号、读者编号、书籍编号、借阅日期和借阅状态是必填项,归还日期为可选项,如果借阅状态为“已还”则必须填写归还日期。 具体插入的数据如下: - 借阅编号:100001,读者编号:123413,书籍编号:0001,借阅日期:2020-11-05,归还日期:NULL,借阅状态:借阅 - 借阅编号:100002,读者编号:223411,书籍编号:0002,借阅日期:2020-9-28,归还日期:2020-10-13,借阅状态:已还 - 借阅编号:100003,读者编号:321123,书籍编号:1001,借阅日期:2020-7-01,归还日期:NULL,借阅状态:过期 - 借阅编号:100004,读者编号:321124,书籍编号:2001,借阅日期:2020-10-09,归还日期:2020-10-14,借阅状态:已还 - 借阅编号:100005,读者编号:321124,书籍编号:0001,借阅日期:2020-10-15,归还日期:NULL,借阅状态:借阅 - 借阅编号:100006,读者编号:223411,书籍编号:2001,借阅日期:2020-10-16,归还日期:NULL,借阅状态:借阅 - 借阅编号:100007,读者编号:411111,书籍编号:1002,借阅日期:2020-9-01,归还日期:2020-9-24,借阅状态:已还 - 借阅编号:100008,读者编号:411111,书籍编号:0001,借阅日期:2020-9-25,归还日期:NULL,借阅状态:借阅 - 借阅编号:100009,读者编号:411111,书籍编号:1001,借阅日期:2020-10-08,归还日期:NULL,借阅状态:借阅
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值