AI网络人工智能-硬盘故障检测
在用户终端PC上打开浏览器,用户在地址栏中输入“https://console.huaweicloud.com/naie/”,进入AI市场。单击界面右上角的“登录”,进入登录界面。
输入账号名和密码。
单击“登录”,进入AI市场。
依次选择“AI服务 > 平台服务 > 训练平台 > 模型训练服务”,进入模型训练服务介绍页面。
需要华为云主账号购买“模型训练服务”,然后才能才这里进入“模型训练服务”中。
点击“进入服务”
在数据集哪里点击“查看全部”
点击创建
填入以下
“数据来源”选择“本地上传”:
选择本地的磁盘数据(路径:https://bbs.huaweicloud.com/forum/thread-56568-1-1.html),然后点击“创建”。
分析数据:
分析数据集:
点击菜单栏特征工程,进入特征工程页面:
点击特征处理按钮“i”进行特征工程创建
如果没有实例,就创建一个新的实例
创建完成后,点击进入编辑环境
参数名称 |
参数说明 |
特征工程名 |
特征工程的名称。可以在创建特征工程时配置。 |
开发平台 |
特征工程处理数据集的计算平台。 l JupyterLab l 旧版体验式开发 |
环境信息 |
资源核数。 |
数据集 |
数据集路径。 |
创建人 |
创建特征工程的用户。 |
创建时间 |
特征工程创建的时间。 |
简介 |
特征工程的描述。可以在创建特征工程时配置。 |
根据名称搜索特征工程。 |
|
特征工程详情。 |
|
进入特征工程编辑页面,执行特征处理操作。 |
|
导出特征处理脚本到用户本地。 |
|
复制特征工程。 |
|
删除特征工程。 |
选择python3,点击
官方给的是绑定数据,但是由于版本的升级,我们选择“选择数据”进行数据的绑定即可
一下步
选择自定义操作
先将自定义操作里面的代码清空,后复制如下代码后粘贴,然后点击运行,(最好每做一步都点击运行,这样能检测出来哪里出错~)
算法代码如下:
I mport pandas as pd data = dataflow.to_pandas_dataframe() # Your code here #去掉列名 data = data.loc[1:] data.sort_values(['disk_sn'], inplace=True)
# 只包含一个值的列,无用 cols_only_one_value = data.nunique().to_frame( name='num').query('num==1').index.tolist() # 保留的列 cols_keep = [i for i in data if i not in cols_only_one_value] # 硬盘smart特征列 cols_smart = [i for i in cols_keep if i.startswith('smart')]
#特征选择 colums = cols_smart+['capacity_bytes','failure','disk_sn'] processed_data = data[colums] dataflow = data_flow.create_dataflow_from_df(processed_data) #@return {"type":"dataflow","attrs":{"source":"dataframe"}} |
下一步:
选择数据集:DATASET,数据集实例:processed_disk_data,与原始数据集DISK-data不同名。
运行完成后点击保存
执行代码同jupyter类似,可单步执行,也可全量代码一起执行。
单步执行:
全量执行:
生成训练数据
点击执行特诊工程之后,返回数据集界面,查看数据集,我们发现生成了清洗后的新数据集了。新数据集的来源是FEATURE,代表着是特征工程生成的数据集。
下一步:点击模型训练
耐心等待~3-7分钟
创建完成
进入编辑环境
点击编辑进入编辑环境进行训练代码的准备。
先将里面的代码清空,后复制如下代码后粘贴,然后点击运行,(最好每做一步都点击运行,这样能检测出来哪里出错~)
# -*- coding: utf-8 -*-
from __future__ import print_function
from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score, roc_curve
from naie.metrics import report
from naie.datasets import get_data_reference
from naie.context import Context
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
import lightgbm as lgb
import os
import pickle
# naie sdk主要用于文件、路径、日志等操作,详见训练平台又上角问号处帮助中心内sdk文档说明
def load_dataset(dataset, dataset_entity):
'''
从数据集中加载数据为DataFrame
'''
data_reference = get_data_reference(
dataset=dataset, dataset_entity=dataset_entity)
df = data_reference.to_pandas_dataframe()
return df
def model_fn():
model = lgb.LGBMClassifier(random_state=1)
return model
def train(x_train, y_train, model):
model.fit(x_train, y_train, categorical_feature=cate_cols)
def save_model(model):
"""
模型存储的固定路径,生成的pkl文件要与推理代码predict.py中的路径对应
"""
model_path = os.path.join(Context.get_model_path(), 'model.pkl')
with open(model_path, 'wb') as ff:
pickle.dump(model, ff)
def save_features(features):
"""
模型存储的固定路径,生成的pkl文件要与推理代码predict.py中的路径对应
"""
features_path = os.path.join(Context.get_model_path(), 'features.pkl')
with open(features_path, 'wb') as ff:
pickle.dump(features, ff)
def score_model(x_validation, y_validation, model):
"""
返回验证得分并通过logs保存在训练任务中
"""
score = accuracy_score(y_validation, model.predict(x_validation))
with report(True) as logs:
logs.log_property("score", score)
return score
def main():
# dataset dataset_entity需要修改为项目数据集对应的参数
data = load_dataset(dataset="DATASET", dataset_entity="processed_disk_data")
features = data.columns.tolist()[:-2]
#因为硬盘容量的数值较大,可以先转化成类别特征的数据
data['capacity_bytes'] = data['capacity_bytes'].astype('category')
# 按照硬盘划分训练集和测试集
train_disks, test_disks = train_test_split(
data['disk_sn'].unique(), shuffle=True, random_state=2019, test_size=0.2)
train_data = data[data['disk_sn'].isin(train_disks)]
test_data = data[data['disk_sn'].isin(test_disks)]
#创建模型
model = lgb.LGBMClassifier(random_state=1,objective = 'binary',num_leaves = 64,n_estimators = 1000,is_unbalance=True)
# 交叉验证
cv_score = cross_val_score(
model, train_data[features], train_data.failure, cv=5, scoring='accuracy', fit_params={'categorical_feature': ['capacity_bytes']})
print(f'CV accuracy score: {cv_score}')
model.fit(train_data[features], train_data.failure,categorical_feature=['capacity_bytes']) # lightgbm处理分类变量
# 评分时是对每个盘进行预测,根据历史数据预测这个盘会不会坏
test_y = test_data.groupby('disk_sn').failure.nth(-1)
test_X = test_data.groupby('disk_sn').nth(-1)[features]
print('test set confusion matrix:')
conf_matrix=confusion_matrix(test_y, model.predict(test_X))
print(conf_matrix)
# 输出误报率FAR,即一块硬盘实际为好盘,而模型预测为坏盘的概率,业务目标 <= 0.1%
print(f'FAR : {conf_matrix[0][1]/sum(conf_matrix[0])}')
#输出查全率FDR,即一块硬盘实际为坏盘,而模型预测为坏盘的概率,业务目标 > 80%
print(f'FDR : {conf_matrix[1][1]/sum(conf_matrix[1])}')
score = score_model(test_X, test_y, model)
print(f'test accuracy score: {score}')
#保留特征
save_features(features)
#保存模型
save_model(model)
# return the score for hyperparameter tuning
return score
if __name__ == "__main__":
main()
代码中的数据位置是DATASET下的processed_disk_data文件,如果数据不是在该位置,请修改上述训练代码中的main函数中load_dataset的参数dataset="DATASET"和dataset_entity="processed_disk_data"。
保存后 Ctrl+s,下一步
然后点击下图的调试按钮:
点击确定,自动进入算法的模型训练页面,如下图所示。
训练完成后,状态如下,会显示训练状态和评估报
如果训练失败,可以通过点击上图右侧的详情来查看系统日志和运行日志:
系统支持将训练好的模型训练任务进行归档。用户可以将归档包编排成应用包发布到应用市场,或者基于归档包创建验证服务、训练服务。
步骤1:单击的,弹出“归档”对话框。
参数配置:
参数名称 |
参数说明 |
模型名称 |
模型包的名称。 |
模型版本 |
训练模型的版本。 默认版本为V1.0.0。 |
模型描述 |
训练模型的描述信息。 |
可以在“模型管理”界面确认是否已经有了我们打包的模型,通过下载按钮进行下载:
至此,模型打包完成。
- 点赞
- 收藏
- 关注作者
评论(0)