适配聚类模型的代码生成逻辑;

This commit is contained in:
lzh
2021-04-06 18:41:38 +08:00
parent fdbf26ef01
commit 50e97f1e8a
14 changed files with 137 additions and 17 deletions
+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MongoConfiguration">
<option name="serverConfigurations">
<list>
<ServerConfiguration>
<option name="label" value="local_mongo" />
<option name="serverUrls">
<list>
<option value="localhost:27017" />
</list>
</option>
<option name="sshTunnelingConfiguration">
<SshTunnelingConfiguration />
</option>
</ServerConfiguration>
</list>
</option>
</component>
</project>
+6 -4
View File
@@ -1,15 +1,17 @@
from django.urls import path
from .engine_view import *
from utils.views2urls import views2urls
app_name = 'engine'
# urlpatterns = views2urls("Engines.engine_view")
urlpatterns = [
# 校验清洗规则
path('check_clean_condition', check_clean_condition),
# 清洗完成的数据保存
path('save_clean_data', save_clean_data)
path('save_clean_data', save_clean_data),
# 建模特征列检测
path('check_mining_condition', check_mining_condition),
# 运行生成的建模代码,并生成报告
path('run_mining_code', run_mining_code)
]
+42 -1
View File
@@ -1,5 +1,6 @@
import json
import traceback
import pandas as pd
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
@@ -47,7 +48,7 @@ def save_clean_data(request):
conditions = post_body.pop("conditions", {})
new_data = clean_engine.check_clean_condition(user_name, dataset_name, conditions)
if isinstance(new_data, pd.core.frame.DataFrame):
res = clean_engine.save_clean_data(user_name,dataset_name,new_data)
res = clean_engine.save_clean_data(user_name, dataset_name, new_data)
if res:
msg = "保存成功"
except Exception as e:
@@ -56,3 +57,43 @@ def save_clean_data(request):
traceback.print_exc()
return JsonResponse({"code": code, "msg": msg, "data": data})
@require_http_methods(['POST'])
def check_mining_condition(request):
"""
检测建模条件, 对特征列类型的合理性进行校验
:param request:
:return:
"""
data, code, msg = None, 200, None
try:
post_body = json.loads(request.body)
postBody = json.loads(request.body)
username = postBody.pop('username')
postBody = postBody.get('data')
name = postBody.get('name')
dataset_name = postBody.get('dataset_name')
features = postBody.get('features')
target = postBody.get('target')
model_type = postBody.get('model_type')
model_name = postBody.get('models')
evaluate_methods = postBody.get("metrics")
except Exception as e:
msg = str(e)
coce = 500
return JsonResponse({"code": code, "msg": msg, "data": data})
@require_http_methods(['POST'])
def run_mining_code(request):
data, code, msg = None, 200, None
try:
post_body = json.loads(request.body)
dataset_name = post_body.pop("dataset", "")
user_name = post_body.pop("user_name", "")
conditions = post_body.pop("conditions", {})
except Exception as e:
msg, code = str(e), 500
return JsonResponse({"code": code, "msg": msg, "data": data})
+1 -1
View File
@@ -103,7 +103,7 @@ class DatasetProcess:
res = model.find_one(query)
return res['data']
except Exception as e:
traceback.print_exc()
print(str(e))
raise e
def get_dataset_cols(self, dataset_name):
+10 -8
View File
@@ -1,7 +1,5 @@
import os
"""
流程:  
` 1、从monodb读取用户上传的数据集(已完成)`      
@@ -89,7 +87,7 @@ class SetModel():
self.joint_code('ImportPackages.py')
# 拼接模型需要的库
for model in self.model_name:
self.generate += MODEL_DICT[self.model_type][model]+"\n"
self.generate += MODEL_DICT[self.model_type][model] + "\n"
# 拼接变量
self.generate += """
@@ -102,13 +100,17 @@ TARGET='{}'
self.generate += """
MODEL = [{}]
""".format(", ".join(sklearn_models))
# 拼接主函数
self.joint_code('Main.py')
# 拼接分类/回归的必要评估方法
# 拼接分类/回归/聚类的主函数与必要评估方法
if self.model_type == "分类":
self.joint_code("classifier_evaluation.py")
self.joint_code('main_supervisied.py')
self.joint_code("evaluation_classifier.py")
elif self.model_type == "回归":
self.joint_code("regressor_evaluation.py")
self.joint_code('main_supervisied.py')
self.joint_code("evaluation_regressor.py")
elif self.model_type == "聚类":
self.joint_code("main_unsupervised.py")
self.joint_code("evaluation_cluster.py")
# 拼接用户自选的可视化的评估方法
if len(self.evaluate_methods) != 0:
+5
View File
@@ -262,3 +262,8 @@ def get_methods(request):
else:
res[method] = sub_method
return JsonResponse({"data": res}, status=200)
@require_http_methods(['POST'])
def plot_graph(request):
pass
+1
View File
@@ -14,6 +14,7 @@ urlpatterns = [
path('generate_code', generate_code), # 生成代码
path('export_code', export_code), # 导出代码文件
path('del_dataset', del_dataset), # 删除数据集
path('plot_graph', plot_graph) # 绘制图形
]
+27
View File
@@ -0,0 +1,27 @@
# 模型性能评估
def model_performance_evaluation(model_name, X, labels, spend_time):
from sklearn.metrics import calinski_harabaz_score
from sklearn.metrics import silhouette_score
sc = silhouette_score(X,labels)
chs = calinski_harabaz_score(X,labels)
print(model_name, "| 轮廓系数: %.4f" % sc)
print(model_name, "| Calinski-Harabaz index: %.4f" % chs)
print(model_name, "| 训练时长(秒): %.4f" % spend_time)
return sc,chs
# 使用模型预测并评估
evaluation_dimensions = ["模型名称", "轮廓系数", "Calinski-Harabaz-index", "训练时长(秒)"]
compare_result = {dimension: [] for dimension in evaluation_dimensions}
for spend_time, fit_model in fit_models.items():
print("====================")
model_name = str(fit_model).split("(")[0]
labels = fit_model.labels_
sc, chs = model_performance_evaluation(model_name, X, labels, spend_time)
compare_result["模型名称"].append(model_name)
compare_result["轮廓系数"].append(sc)
compare_result["Calinski-Harabaz-index"].append(chs)
compare_result["训练时长(秒)"].append(spend_time)
res_df = pd.DataFrame(compare_result)
print(res_df)
@@ -1,4 +1,3 @@
# 读取数据
if FILE_PATH.split('.')[-1]=='xls' or FILE_PATH.split('.')[-1]=='xlsx':
DF=pd.read_excel(FILE_PATH)
+18
View File
@@ -0,0 +1,18 @@
# 读取数据
if FILE_PATH.split('.')[-1]=='xls' or FILE_PATH.split('.')[-1]=='xlsx':
DF=pd.read_excel(FILE_PATH)
else:
DF=pd.read_csv(FILE_PATH)
X = DF[FEATURES]
# 模型训练,key为模型训练的时间,value为训练好的模型
fit_models = {}
for model in MODEL:
start_time = time.time()
fit_model= model.fit(X)
end_time = time.time()
spend_time = end_time - start_time
fit_models[spend_time] = fit_model
+7 -2
View File
@@ -20,7 +20,12 @@ MODEL_DICT = {
'支持向量机': 'from sklearn.svm import SVR',
'神经网络': 'from sklearn.neural_network import MLPRegressor',
'Adaboost': 'from sklearn.ensemble import AdaBoostRegressor',
'随机森林':'from sklearn.ensemble import RandomForestRegressor'
'随机森林': 'from sklearn.ensemble import RandomForestRegressor'
},
'聚类': {
'K_means': 'from sklearn.cluster import KMeans',
'MiniBatchKMeans': 'from sklearn.cluster import MiniBatchKMeans',
'BIRCH': 'from sklearn.cluster import Birch'
},
'ROC曲线': 'plot_ROC_curve.py',
'混淆矩阵': 'plot_confusion_matrix.py'
@@ -35,7 +40,7 @@ METRICS_DICT = {
"误差平方和": "",
"决定系数(R²)": ""
},
"聚类":{}
"聚类": {}
}
CLEAN_DICT = {
Binary file not shown.