适配聚类模型的代码生成逻辑;
This commit is contained in:
Generated
+20
@@ -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>
|
||||
@@ -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
@@ -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})
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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) # 绘制图形
|
||||
|
||||
]
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -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
@@ -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.
Reference in New Issue
Block a user