Datawhale学习笔记AI +新能源:电动汽车充电站充电量预测2

在飞浆平台上成功运行出pandas-profiling啦~
首先一键安装

pip install ydata_profiling

然后演示,可以生成一个网页对数据有一个比较好的理解

import numpy as np
import pandas as pd
from ydata_profiling import ProfileReport
 
train_power = pd.read_csv('/home/aistudio/work/data/train/power.csv')
profile = ProfileReport(train_power, title="Profiling Report")
profile.to_file('report.html')

出来啦
在这里插入图片描述
试试调参效果在这里插入图片描述
算了算了还是不调了效果真不行在这里插入图片描述

试试利用上下值填充缺失值

#利用上下值填充缺失值
train_data.fillna(method='bfill',inplace = True)
test_data.fillna(method='bfill',inplace = True)

去掉f3

#去掉f3
train_df.drop('f3',axis = 1,inplace = True)
test_df.drop('f3',axis = 1,inplace = True)
#绘制直方图和Q-Q图,查看训练集数据正态分布情况
train_cols =6
train_rows =len(train_df.columns)
plt.figure(figsize=(4*train_cols,4*train_rows))

i=0
for col in train_df.columns:
    i+=1
    ax=plt.subplot(train_rows,train_cols,i)
    sns.distplot(train_df[col],fit=stats.norm)

    i+=1
    ax = plt.subplot(train_rows,train_cols,i)
    res = stats.probplot(train_df[col],plot=plt)
plt.tight_layout()
plt.show()

在这里插入图片描述
同样,查看测试集的情况

#绘制直方图和Q-Q图,查看测试集数据正态分布情况
test_cols =6
test_rows =len(test_df.columns)
plt.figure(figsize=(4*test_cols,4*test_rows))

i=0
for col in test_df.columns:
    i+=1
    ax=plt.subplot(test_rows,test_cols,i)
    sns.distplot(test_df[col],fit=stats.norm)

    i+=1
    ax = plt.subplot(test_rows,test_cols,i)
    res = stats.probplot(test_df[col],plot=plt)
plt.tight_layout()
plt.show()

在这里插入图片描述

了解到一个自动调参工具openbox,但是我还不会用只下载成功了它的包
以下是来自Datawhale直播关于如何给模型调参

什么是超参数?

在机器学习的过程中,
超参= 在开始机器学习之前,就人为设置好的参数。
模型参数=通过训练得到的参数数据。
通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
参数与超参数的区别:
模型参数是模型内部的配置变量,需要用数据估计模型参数的值,就像机器学习模型中的权重和偏差,是模型根据数据自动学习的;
模型超参数是模型外部的配置,需要手动设置超参数的值,像机器学习中的学习率、模型复杂度等设置。
常见超参数:
梯度下降法中的学习速率α
决策树模型中树的深度d
正则化系数λ

机器学习中一直说的“调参”,实际上不是调“参数”,而是调“超参数”。

常用调参方法:

在这里插入图片描述

经验调参

经验调参调的是以下框框中的参,结合数据情况及算法的理解,优化调参的优先顺序及参数的经验值
在这里插入图片描述

网格调参

简单来讲,网格搜索是一种调参手段,它利用的是一种十分简单暴力的方法:穷举搜索。在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。
实例代码:

from sklearn.model_selection import GridSearchTV

knn = KNeighborsClassifier()
grid_param = {'n_neighbors':list(range(2,11)),
			'algorithm':['auto','ball_tree','kd_tree','brute']}
grid = GridSearchTV(knn,grid_param,cv = 5)
grid.fit(X_train,y_train)
grid.best_params_
grid.best_score_
grid.cv_results_['params']
grid.cv_results_['mean_test_score']

怎么办俺觉得都是干货,都想给它拿过来~
小熊老师说贝叶斯优化和automlyyds!!!我也要尝试尝试

贝叶斯优化

贝叶斯优化用于机器学习调参由J. Snoek(2012)提出,主要思想是,给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道内部结构以及数学性质),通过不断地添加样本点来更新目标函数的后验分布(高斯过程,直到后验分布基本贴合于真实分布。
简单的说,就是考虑了上一次参数的信息,从而更好的调整当前的参数。
安装

!pip install bayesian-optimization
from skopt import BayesSearchCV

import warnings
warning.filterwarnings('ignore')

#参数范围由以下之一指定
from skopt.space import Real,Categorical,Integer

knn = KNeighborsClassifier()
#定义超参数网格
grid_param = {'n_neighbors':list(range(2,11)),'algorithm':['auto','ball_tree','kd_tree','brute']}
#初始化贝叶斯搜索
Bayes = BayesSearchCV(knn,grid_param,n_iter=30,random_state=14)
Bayes.fit(X_train,y_train)
#最佳参数组合
Bayes.best_params_
#使用最佳参数组合达到的得分
Bayes.best_score_
#所有超参数的组合
Bayes.cv_results_['params']
#交叉验证的平均得分
Bayes.cv_results_['mean_test_score']

AutoML

!pip install -U autogluon 
from autogluon.tabular import TabularDataset,TabularPredictor
import pandas as pd
# 读取数据
train_power_forecast_history = pd.read_csv('./data/train/power_forecast_history.csv')
train_power = pd.read_csv('./data/train/power.csv')
train_stub_info = pd.read_csv('./data/train/stub_info.csv')

test_power_forecast_history = pd.read_csv('./data/test/power_forecast_history.csv')
test_stub_info = pd.read_csv('./data/test/stub_info.csv')

# 聚合数据
train_df = train_power_forecast_history.groupby(['id_encode','ds']).head(1)
del train_df['hour']

test_df = test_power_forecast_history.groupby(['id_encode','ds']).head(1)
del test_df['hour']

tmp_df = train_power.groupby(['id_encode','ds'])['power'].sum()
tmp_df.columns = ['id_encode','ds','power']

# 合并充电量数据
train_df = train_df.merge(tmp_df, on=['id_encode','ds'], how='left')

### 合并数据
train_df = train_df.merge(train_stub_info, on='id_encode', how='left')
test_df = test_df.merge(test_stub_info, on='id_encode', how='left')
label = 'power'
save_path = './model'
metric = 'root_mean_squared_error'
predictor = TabularPredictor(label=label,path=save_path,eval_metric=metric).fit(train,presets='good_quality')
predictor.leaderboard(train,silent=True)
y_pred = predictor.predict(test)
test_df['power'] = y_pred
test_df['power'] = test_df['power'].apply(lambda x: 0 if x<0 else x)
test_df[['id_encode','ds','power']].to_csv('result.csv',index=False)

特征工程

特征工程就是一个把原始数据转变成特征的过程,这些特征可以很好的描述这些数据,并且利用它们建立的模型在未知数据上的表现性能可以达到最优(或者接近最佳性能)。从数学的角度来看,特征工程就是人工地去设计输入变量X。
简而言之,将数据转换为能够更好地表示潜在问题的特征,从而提高机器学习性能的过程。

  • 转换数据:从原始问题开始,进行数据的过滤后,最终进行数据编码转换等,特征工程使用任何阶段的数据
  • 特征:特征是对机器学习建模有意义的数据属性。比如,自然数编号1-2-3或者姓名等一般都是无效的字段,一般不做特征处理。
  • 更好地表示潜在问题,提高性能:特征工程的最终目的是获取更有价值的数据,挖掘更加的数据模式,让模型取得更好地效果。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unicornlyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值