import os
import pandas as pd
import numpy as np
from django.http import JsonResponse, HttpResponse
from django.shortcuts import render
from django.views import View
from django.conf import settings
import sklearn.metrics
import lightgbm as lgb
import catboost as cbt
import xgboost as xgb
from statistics import mode
import sklearn.metrics
from cvxopt import matrix, solvers
import json
from sklearn.metrics import f1_score
from collections import Counter
# Create combination views here.
# 将上传的文件名作为全局变量保存
train_file_name = ''
predict_file_name = ''
# 上传训练集,接收训练集
class Upload(View):
"""训练功能:上传训练集"""
def get(self, request):
return render(request, 'combination/combination-upload.html')
def post(self, request):
global train_file_name
global predict_file_name
train_csv_file = request.FILES.get('train_csv_file')
predict_csv_file = request.FILES.get('predict_csv_file')
# 这里记得加入判断传入文件格式为空,以及文件格式不对的判断
train_file_name = train_csv_file.name
predict_file_name = predict_csv_file.name
if predict_file_name.split('.')[1] != 'csv' and train_file_name.split('.')[1] != 'csv':
return JsonResponse({'code': 0})
train_file_path = os.path.join(settings.MEDIA_ROOT, 'csv_dir\\' + train_file_name)
predict_file_path = os.path.join(settings.MEDIA_ROOT, 'csv_dir\\' + predict_file_name)
# 学到
with open(train_file_path, 'wb+') as f:
for chunk in train_csv_file.chunks():
f.write(chunk)
with open(predict_file_path, 'wb+') as f:
for chunk in predict_csv_file.chunks():
f.write(chunk)
return JsonResponse({'code': 1})
# 执行训练
def execute_combination(request):
global train_file_name
global predict_file_name
# ============================ 数据预处理 ================================= #
# 读入 CSV 文件
df = pd.read_csv(os.path.join(settings.MEDIA_ROOT, 'csv_dir\\' + train_file_name))
# df1 = pd.read_csv(os.path.join(settings.STATICFILES_DIRS[0], 'csv_dir\\' + 'validate_1000.csv'))
df1 = pd.read_csv(os.path.join(settings.STATIC_ROOT, 'csv_dir\\' + 'validate_1000.csv'))
df2 = pd.read_csv(os.path.join(settings.MEDIA_ROOT, 'csv_dir\\' + predict_file_name))
# 获取每列的平均值,并用该列的平均值填充空值和 NaN 值
df = df.apply(lambda x: x.fillna(x.mean()), axis=0)
df1 = df1.apply(lambda x: x.fillna(x.mean()), axis=0)
df2 = df2.apply(lambda x: x.fillna(x.mean()), axis=0)
Xtrain = df.iloc[::, 1:108:]
Ytrain = df.iloc[:, -1]
Xva = df1.iloc[::, 1:108:]
Yva = df1.iloc[:, -1]
Xtest = df2.iloc[::, 1:108:]
# 训练集的样本数量、特征数
sample_size_train = len(Xtrain) # 行,样本数量
feature_quantity_train = len(Xtrain.columns) # 列,特征数
# 测试集的样本数量、特征数
sample_size_test = len(Xtest) # 行,样本数量
feature_quantity_test = len(Xtest.columns) # 列,特征数
kmm = KMM(kernel_type='rbf', B=1)
beta = kmm.fit(Xtrain, Xva)
Xtrain = pd.DataFrame(Xtrain)
Xs_new = beta * Xtrain
# ==================================训练基础分类器==================================== #
xg = xgb.XGBClassifier(seed=0)
xg.fit(Xs_new, Ytrain)
y_pred = xg.predict(Xva)
xg_f1 = f1_score(Yva, y_pred, average=None)
cb = cbt.CatBoostClassifier(eval_metric='AUC')
cb.fit(Xs_new, Ytrain)
y_pred = cb.predict(Xva)
cb_f1 = f1_score(Yva, y_pred, average=None)
lg = lgb.LGBMClassifier()
lg.fit(Xs_new, Ytrain)
y_pred = lg.predict(Xva)
lg_f1 = f1_score(Yva, y_pred, average=None)
# ==================================预测==================================== #
model = []
for i in range(len(lg_f1)):
if max(lg_f1[i], xg_f1[i], cb_f1[i]) == lg_f1[i]:
model.append(lg)
elif max(lg_f1[i], xg_f1[i], cb_f1[i]) == xg_f1[i]:
model.append(xg)
else:
model.append(cb)
yp = our_model(Xtest, m1=lg, m2=xg, m3=cb, model=model)
# ==================================可视化==================================== #
counter = Counter(yp)
# 输出分类结果(JSON格式)
unique = []
counts = []
for k, v in counter.items():
unique.append(k)
counts.append(v)
# 对输出结果排序
unique.sort()
# 生成统计每种分类的数量
counts = [dict(counter)[k] for k in unique]
# 转变为echarts可以接收的格式
pie_data = dict(counter)
# 将int64类型的数据转换为int类型
df['sample_id'] = df['sample_id'].astype(int)
# 提取sample_id和预测值列的数据
sample_ids = df['sample_id'].tolist()
predictions = yp
# 创建字典
output_dict = {str(sample_id): prediction for sample_id, prediction in zip(sample_ids, predictions)}
# 指定保存JSON文件的路径和文件名
output_file = 'output_combination.json'
# 将字典保存为JSON文件,指定ensure_ascii=False参数
with open(os.path.join(settings.MEDIA_ROOT, 'result\\' + output_file), 'w') as f:
json.dump(output_dict, f, ensure_ascii=False)
# 返回结果给可视化界面
context = {
'unique': unique,
'counts': counts,
'pie_data': pie_data,
'sample_size_train': sample_size_train,
'feature_quantity_train': feature_quantity_train,
'sample_size': sample_size_test,
'feature_quantity': feature_quantity_test,
'describe': '测试集',
}
response = render(request, 'combination/combination-visualization.html', context=context)
combination_count = int(request.COOKIES.get('combination'))
combination_count += 1
response.set_cookie('combination', combination_count)
return response
# 下载预测结果
def download(request):
# 读取要下载的文件
filepath = os.path.join(settings.MEDIA_ROOT, 'result\\' + 'output_combination.json')
with open(filepath, 'rb') as f:
filedata = f.read()
# 返回响应,弹出文件下载对话框
response = HttpResponse(filedata, content_type='application/json')
response['Content-Disposition'] = f'attachment; filename="output_combination.json"'
return response
def kernel(ker, X1, X2, gamma):
K = None
if ker == 'linear':
if X2 is not None:
K = sklearn.metrics.pairwise.linear_kernel(
np.asarray(X1), np.asarray(X2))
else:
K = sklearn.metrics.pairwise.linear_kernel(np.asarray(X1))
elif ker == 'rbf':
if X2 is not None:
K = sklearn.metrics.pairwise.rbf_kernel(
np.asarray(X1), np.asarray(X2), gamma)
else:
K = sklearn.metrics.pairwise.rbf_kernel(
np.asarray(X1), None, gamma)
return K
class KMM:
def __init__(self, kernel_type='linear', gamma=1.0, B=1.0, eps=None):
'''
Initialization function
:param kernel_type: 'linear' | 'rbf'
:param gamma: kernel bandwidth for rbf kernel
:param B: bound for beta
:param eps: bound for sigma_beta
'''
self.kernel_type = kernel_type
self.gamma = gamma
self.B = B
self.eps = eps
def fit(self, Xs, Xt):
'''
Fit source and target using KMM (compute the coefficients)
:param Xs: ns * dim
:param Xt: nt * dim
:return: Coefficients (Pt / Ps) value vector (Beta in the paper)
'''
ns = Xs.shape[0]
nt = Xt.shape[0]
if self.eps == None:
self.eps = self.B / np.sqrt(ns)
K = kernel(self.kernel_type, Xs, None, self.gamma)
kappa = np.sum(kernel(self.kernel_type, Xs, Xt, self.gamma)
* float(ns) / float(n
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于技术手段(包括但不限于机器学习、深度学习等技术)对分布式系统的故障数据进行分析,设计故障诊断模型,高效地分析并识别故障类别,实现分布式系统故障运维的智能化,快速恢复故障的同时大大降低分布式系统运维工作的难度,减少运维对人力资源的消耗。在分布式系统中某个节点发生故障时,故障会沿着分布式系统的拓扑结构进行传播,造成自身节点及其邻接节点相关的KPI指标和发生大量日志异常
资源推荐
资源详情
资源评论
收起资源包目录
Python基于机器学习的分布式系统故障诊断系统源代码,分布式系统的故障数据进行分析,设计故障诊断模型,高效地分析并识别故障类别 (443个子文件)
ttx.1 5KB
activate 2KB
activate.bat 1000B
deactivate.bat 371B
CatBoost 437.64MB
pyvenv.cfg 124B
bootstrap.min.css 124KB
bootstrap.min1.css 124KB
bootstrap.min2.css 124KB
ionicons.min.css 50KB
ionicons.min2.css 50KB
ionicons.min1.css 50KB
style2.css 31KB
style3.css 31KB
style.css 31KB
style1.css 31KB
font-awesome.min1.css 30KB
font-awesome.min.css 30KB
font-awesome.min2.css 30KB
widgets2.css 19KB
widgets.css 19KB
widgets1.css 19KB
countrySelect.min1.css 16KB
countrySelect.min.css 16KB
countrySelect.min2.css 16KB
fullcalendar.min1.css 15KB
fullcalendar.min.css 15KB
fullcalendar.min2.css 15KB
responsive2.css 14KB
responsive.css 14KB
responsive1.css 14KB
simple-line-icons3.css 12KB
simple-line-icons.css 12KB
simple-line-icons2.css 12KB
simple-line-icons1.css 12KB
chartist.min.css 11KB
chartist.min2.css 11KB
chartist.min1.css 11KB
chosen.min2.css 10KB
chosen.min.css 10KB
chosen.min1.css 10KB
presets.css 9KB
presets3.css 9KB
presets2.css 9KB
presets1.css 9KB
pe-icon-7-stroke3.css 9KB
pe-icon-7-stroke.css 9KB
pe-icon-7-stroke1.css 9KB
pe-icon-7-stroke2.css 9KB
linea-basic.css 7KB
linea-basic3.css 7KB
linea-basic1.css 7KB
linea-basic2.css 7KB
css.css 7KB
magnific-popup2.css 7KB
magnific-popup1.css 7KB
magnific-popup.css 7KB
mail1.css 7KB
mail2.css 6KB
mail.css 6KB
modals2.css 6KB
modals1.css 6KB
modals.css 6KB
icon-weather.css 5KB
icon-weather1.css 5KB
icon-weather2.css 5KB
dataTables.bootstrap42.css 5KB
dataTables.bootstrap41.css 5KB
dataTables.bootstrap4.css 5KB
dataTables.bootstrap4.min.css 5KB
calendar2.css 5KB
calendar1.css 5KB
calendar.css 5KB
forms1.css 4KB
forms2.css 4KB
forms.css 4KB
select.bootstrap4.min.css 4KB
buttons.bootstrap4.min.css 4KB
owl.carousel.min3.css 4KB
owl.carousel.min.css 4KB
owl.carousel.min2.css 4KB
owl.carousel.min1.css 4KB
e-commerce1.css 3KB
e-commerce2.css 3KB
e-commerce.css 3KB
alerts2.css 3KB
alerts1.css 3KB
alerts.css 3KB
card2.css 2KB
perfect-scrollbar3.css 2KB
perfect-scrollbar.css 2KB
card1.css 2KB
card.css 2KB
perfect-scrollbar2.css 2KB
perfect-scrollbar1.css 2KB
bootstrap3-wysihtml5.min2.css 2KB
bootstrap3-wysihtml5.min.css 2KB
bootstrap3-wysihtml5.min1.css 2KB
c3.min2.css 2KB
c3.min1.css 2KB
共 443 条
- 1
- 2
- 3
- 4
- 5
资源评论
程序员柳
- 粉丝: 6297
- 资源: 1326
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Picasso_v3.1 2.ipa
- chromedriver-mac-arm64.zip
- 蓝zapro.apk
- chromedriver-linux64.zip
- UCAS研一深度学习实验-MNIST手写数字识别python源码+详细注释(高分项目)
- 基于Python和PyTorch框架完成的一个手写数字识别实验源码(带MINIST手写数字数据集)+详细注释(高分项目)
- 基于Matlab在MNIST数据集上利用CNN完成手写体数字识别任务,并实现单层CNN反向传播算法+源代码+文档说明(高分项目)
- NVIDIA驱动、CUDA和Pytorch及其依赖
- 基于SVM多特征融合的微表情识别python源码+项目说明+详细注释(高分课程设计)
- html动态爱心代码一(附源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功