From ec5174ca761257a04eee41f3963ecf6a79ec0a2e Mon Sep 17 00:00:00 2001 From: haotian <2421912570@qq.com> Date: Mon, 17 Feb 2025 16:37:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=BF=94=E5=9B=9E=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E8=AF=A6=E6=83=85=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- date_feature/parameter.yaml | 2 +- example_method_reader_date_feature.py | 2 +- example_method_reader_date_process.py | 2 +- example_method_reader_model.py | 14 + .../method_reader_date_feature.cpython-39.pyc | Bin 0 -> 3425 bytes .../method_reader_date_process.cpython-39.pyc | Bin 0 -> 3753 bytes .../method_reader_model.cpython-39.pyc | Bin 0 -> 3612 bytes .../method_reader_date_feature.py | 12 +- .../method_reader_date_process.py | 0 function/method_reader_model.py | 135 ++++ model/method.yaml | 373 ++++++++++ model/parameter.yaml | 650 ++++++++++++++++++ 12 files changed, 1181 insertions(+), 9 deletions(-) create mode 100644 example_method_reader_model.py create mode 100644 function/__pycache__/method_reader_date_feature.cpython-39.pyc create mode 100644 function/__pycache__/method_reader_date_process.cpython-39.pyc create mode 100644 function/__pycache__/method_reader_model.cpython-39.pyc rename {data_process => function}/method_reader_date_feature.py (91%) rename {data_process => function}/method_reader_date_process.py (100%) create mode 100644 function/method_reader_model.py create mode 100644 model/method.yaml create mode 100644 model/parameter.yaml diff --git a/date_feature/parameter.yaml b/date_feature/parameter.yaml index 9bd9da1..c9e27df 100644 --- a/date_feature/parameter.yaml +++ b/date_feature/parameter.yaml @@ -1,4 +1,4 @@ -feature_engineering_methods_parameters: +feature_engineering_methods: LabelEncoder: description: "将分类标签编码为整数。" diff --git a/example_method_reader_date_feature.py b/example_method_reader_date_feature.py index 5718f38..5db4092 100644 --- a/example_method_reader_date_feature.py +++ b/example_method_reader_date_feature.py @@ -1,4 +1,4 @@ -from data_process.method_reader_date_feature import MethodReader +from function.method_reader_date_feature import MethodReader # 创建方法读取器实例 reader = MethodReader() diff --git a/example_method_reader_date_process.py b/example_method_reader_date_process.py index 4f11c7c..67bc139 100644 --- a/example_method_reader_date_process.py +++ b/example_method_reader_date_process.py @@ -1,4 +1,4 @@ -from data_process.method_reader_date_process import MethodReader +from function.method_reader_date_process import MethodReader # 创建方法读取器实例 reader = MethodReader() diff --git a/example_method_reader_model.py b/example_method_reader_model.py new file mode 100644 index 0000000..ab9b82c --- /dev/null +++ b/example_method_reader_model.py @@ -0,0 +1,14 @@ +from function.method_reader_model import MethodReader + +# 创建方法读取器实例 +reader = MethodReader() + +# 获取所有预处理方法 +methods = reader.get_preprocessing_methods() +print("预处理方法列表:") +print(methods) + +# 获取特定方法的详细信息 +method_details = reader.get_method_details('SVC') +print("\nSVC方法详情:") +print(method_details) \ No newline at end of file diff --git a/function/__pycache__/method_reader_date_feature.cpython-39.pyc b/function/__pycache__/method_reader_date_feature.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fee522804e8e795c35ae6e3f714ce9ed7626b269 GIT binary patch literal 3425 zcmds3-H#j96~A}p&WF9b&L)9~uqBu#(6|-53#Af5QB|psO4Y`S2r6QvYBcy>d#4@G zc<+o6w(Lk`w?O%5cwwu;MzRrYvwa{{D;1$A@PFK=O2xaIXP!VJ>NzuG$4-}jpdR_m zIrrn7JNN$1?_6(Tp-ABO^;iFB=*I~84;s@y9gLsBKRyqF6HWu-;9Co5Q**SY?&vgY zXAVpI4ab1D9+*wbu_*Zk;fxzwgd3ZhV{>|mRLtApi&QI`V$b@uM6oqLPAXKfi(ax` z!@lX?WChPds~`^L#L+l)bgprIi#SXeob6Ca>9v8BGKZM!a{%r4`@8AC2yZg63Ik<6ibai|5r|UI3wJg+e zWj}|1dJyenTzHnkTX`El)>c08q%6ilkD;{t9;o~xjl9hEYN_;O|xv+LI@RE8Yn=AEpSWEmU zT*-sVbn{&9CBm%>FKJ7$-0I-c{m@Tb7f}|QAc!_ki?nn{>+GQ!9vz&2cbg2dHTLeu9ZkUjDnb6|06NI{3OmtbUKcRr@1&nW4hN&5@jPKrIY znMT8rSICRxCGgv4mswcM-m7F4S^!>!?8x659NfA!4XeHFH@>|2ukHiWJC<+ea>r{1 z-Ey`=S_lzk2#lumIFY-CT!1moT=rFN3o>5Ox?|=TrXs~) zCXT>JSpcyJ|M&z5qG{BIr=%^?vj8MhE722lyj58OFCUT{|CeYQUA?mR{@*i_%F(nm zgQiKMXMj3=aZCl@jVTE=fXL%0?gLTno;eIm6USpbm1psEZ~rr8iKizYMu8kNb-r_8 zJ_7&4&zGj>dwP~EQtq3?$a!t%h!MUM!gvde?zsl((*zTo4xoDYWT*}FApr`}dYXI^ zXoPVJ6aqD6N5`b*3@F6d(Q*KHl1Y@AZrsMsNP{V0c|E`nZh; zwEz3hMxVbn`t;BH*Wb=&R&>R%MyNS1;+pic#51$3S5}-c0#sZxPJo);PQJo z6bT_6FHeD1VQKcuv)KB56nOIYAVQr4U+&C0#vlI#jE-?0@&IEeD1%4C=UdwXdB-*Y zFVJV+={`1tneTK7TQZkzMOtI!QE*<l#4k3I$JW#*;qf=>_nl zPdq{W*|@y%LJwdHp0+2RjNFq6D`5l5;o>s{7=s3ND%Xk)SXls5BAqJd zq2bU}GP6`#fqrL<;I#1CHMoN{BH3|DlcmEY3~p_QCEGE~j64DIb*+KR_#6nxGL1pC zJq9dnYBpWeXDkNYaFv@pU$Z;*!s0mp9?niNugU)#rCOPj7Q|3R*KJ0;4V&(&dDq=& zdqIBNwOp4+HP@9`|0O16dK-|Kj&d0Vl8Ss9#oelsYU$MhuZVJw6s`S zlGsxz$Oqx2%%sx-uFL%E*rG+T#I#oyUQYu5<@7p~PC6`(vd?87@Kaz15+fhNUZwYx GdF{VA)2;ac literal 0 HcmV?d00001 diff --git a/function/__pycache__/method_reader_date_process.cpython-39.pyc b/function/__pycache__/method_reader_date_process.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24a02b6b44eeeb2a869bd876b8dd325cd23a7f66 GIT binary patch literal 3753 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 RXFw-NjQR;{r3$VY?SCw2;|c%( literal 0 HcmV?d00001 diff --git a/data_process/method_reader_date_feature.py b/function/method_reader_date_feature.py similarity index 91% rename from data_process/method_reader_date_feature.py rename to function/method_reader_date_feature.py index 99cdfb6..253492b 100644 --- a/data_process/method_reader_date_feature.py +++ b/function/method_reader_date_feature.py @@ -53,12 +53,12 @@ class MethodReader: # 获取特征工程方法 - outlier_methods = list(self.method_config.get('feature_engineering_methods', {}).keys()) - if outlier_methods: + feature_engineering_methods = list(self.method_config.get('feature_engineering_methods', {}).keys()) + if feature_engineering_methods: methods.append({ - "name": "outlier_detector", - "description": "异常值检测", - "method": outlier_methods + "name": "feature_engineering_methods", + "description": "特征工程方法", + "method": feature_engineering_methods }) return { @@ -88,7 +88,7 @@ class MethodReader: # 查找方法参数信息 parameter_info = None - for category in ['feature_engineering_methods_parameters']: + for category in ['feature_engineering_methods']: if method_name in self.parameter_config.get(category, {}): parameter_info = self.parameter_config[category][method_name] break diff --git a/data_process/method_reader_date_process.py b/function/method_reader_date_process.py similarity index 100% rename from data_process/method_reader_date_process.py rename to function/method_reader_date_process.py diff --git a/function/method_reader_model.py b/function/method_reader_model.py new file mode 100644 index 0000000..a58ed8f --- /dev/null +++ b/function/method_reader_model.py @@ -0,0 +1,135 @@ +import yaml +from typing import Dict, List +import os +import logging +from pathlib import Path + +class MethodReader: + """方法配置读取器""" + + def __init__(self): + """初始化方法读取器""" + self.logger = logging.getLogger(__name__) + self.method_config = self._load_method_config() + self.parameter_config = self._load_parameter_config() + + def _load_method_config(self) -> Dict: + """加载方法配置文件""" + try: + config_path = Path('model/method.yaml') + if not config_path.exists(): + raise FileNotFoundError(f"Method config file not found at {config_path}") + + with open(config_path, 'r', encoding='utf-8') as f: + config = yaml.safe_load(f) + + self.logger.info("Successfully loaded method config") + return config + + except Exception as e: + self.logger.error(f"Error loading method config: {str(e)}") + raise + + def _load_parameter_config(self) -> Dict: + """加载参数配置文件""" + try: + config_path = Path('model/parameter.yaml') + if not config_path.exists(): + raise FileNotFoundError(f"Parameter config file not found at {config_path}") + + with open(config_path, 'r', encoding='utf-8') as f: + config = yaml.safe_load(f) + + self.logger.info("Successfully loaded parameter config") + return config + except Exception as e: + self.logger.error(f"Error loading parameter config: {str(e)}") + raise + + def get_preprocessing_methods(self) -> Dict: + """获取预处理方法列表""" + try: + methods = [] + + # 分类方法 + classification_algorithms = list(self.method_config.get('classification_algorithms', {}).keys()) + if classification_algorithms: + methods.append({ + "name": "classification_algorithms", + "description": "分类方法", + "method": classification_algorithms + }) + + # 回归方法 + regression_algorithms = list(self.method_config.get('regression_algorithms', {}).keys()) + if regression_algorithms: + methods.append({ + "name": "regression_algorithms", + "description": "回归方法", + "method": regression_algorithms + }) + + # 聚类方法 + clustering_algorithms = list(self.method_config.get('clustering_algorithms', {}).keys()) + if clustering_algorithms: + methods.append({ + "name": "clustering_algorithms", + "description": "聚类方法", + "method": clustering_algorithms + }) + + return { + "status": "success", + "methods": methods + } + + except Exception as e: + self.logger.error(f"Error getting preprocessing methods: {str(e)}") + return { + "status": "error", + "error": str(e) + } + + def get_method_details(self, method_name: str) -> Dict: + """获取指定方法的详细信息""" + try: + # 在各个方法类别中查找方法原理和优缺点 + method_info = None + for category in ['classification_algorithms', 'regression_algorithms', 'clustering_algorithms']: + if method_name in self.method_config.get(category, {}): + method_info = self.method_config[category][method_name] + break + + if method_info is None: + raise ValueError(f"Method {method_name} not found in method config") + + # 查找方法参数信息 + parameter_info = None + for category in ['classification_algorithms', 'regression_algorithms', 'clustering_algorithms']: + if method_name in self.parameter_config.get(category, {}): + parameter_info = self.parameter_config[category][method_name] + break + + if parameter_info is None: + raise ValueError(f"Method {method_name} not found in parameter config") + + # 组合返回信息 + return { + "status": "success", + "method": { + "name": method_name, + "description": parameter_info.get('description', ''), + "principle": method_info.get('principle', ''), + "advantages": method_info.get('advantages', []), + "disadvantages": method_info.get('disadvantages', []), + "applicable_scenarios": method_info.get('applicable_scenarios', []), + "parameters": parameter_info.get('parameters', []) + } + } + + except Exception as e: + self.logger.error(f"Error getting method details: {str(e)}") + return { + "status": "error", + "error": str(e) + } \ No newline at end of file diff --git a/model/method.yaml b/model/method.yaml new file mode 100644 index 0000000..cfafca2 --- /dev/null +++ b/model/method.yaml @@ -0,0 +1,373 @@ +classification_algorithms: + LogisticRegression: + principle: "逻辑回归是一种线性分类模型,使用 Sigmoid 函数将线性回归的输出映射到 [0,1] 之间,适用于二分类问题。" + advantages: + - "计算效率高,适用于大规模数据。" + - "可解释性强,系数可用于判断特征的重要性。" + - "对线性可分数据表现良好。" + disadvantages: + - "对非线性数据的处理能力较弱。" + - "容易受到异常值的影响。" + applicable_scenarios: + - "医学诊断,如是否患有某种疾病。" + - "信用风险评估,如贷款违约预测。" + - "市场营销中的客户分类。" + + SVC: + principle: "支持向量机(SVM)通过寻找最大化类别间隔的超平面进行分类,支持线性和非线性分类(通过核函数)。" + advantages: + - "适用于高维数据,尤其是样本较少的情况。" + - "通过核函数可以处理非线性分类问题。" + disadvantages: + - "对大规模数据的计算复杂度较高。" + - "对参数和核函数的选择较敏感。" + applicable_scenarios: + - "文本分类,如垃圾邮件检测。" + - "图像识别,如手写数字分类。" + + SVDD: + principle: "支持向量数据描述(SVDD)是一种基于支持向量机的单类分类方法,通过寻找最小球面来包围正常数据点,从而检测异常值。" + advantages: + - "适用于异常检测和单类分类问题。" + - "能够有效应对非线性分布数据。" + disadvantages: + - "对参数选择较敏感,训练时间较长。" + applicable_scenarios: + - "异常检测,如信用卡欺诈检测。" + - "工业设备故障检测。" + + DecisionTreeClassifier: + principle: "决策树基于特征的划分规则构建一棵树,通过树结构进行分类。" + advantages: + - "可解释性强,易于理解和可视化。" + - "对数据的分布和尺度不敏感,无需归一化。" + disadvantages: + - "容易过拟合,泛化能力较弱。" + - "对噪声数据较敏感。" + applicable_scenarios: + - "客户细分,如电商用户分类。" + - "医学诊断,如肿瘤良恶性分类。" + + RandomForestClassifier: + principle: "随机森林是一种集成学习方法,通过构建多个决策树并投票或平均进行分类,提高模型的稳定性和准确性。" + advantages: + - "较强的泛化能力,能有效防止过拟合。" + - "可用于高维数据,支持特征重要性评估。" + disadvantages: + - "训练时间较长,预测速度相对较慢。" + applicable_scenarios: + - "信用风险评估。" + - "医疗数据分析。" + + XGBClassifier: + principle: "XGBoost(Extreme Gradient Boosting)是一种基于梯度提升树(GBDT)的改进算法,具有更强的正则化和并行处理能力。" + advantages: + - "计算效率高,支持并行计算。" + - "具有内置的缺失值处理能力。" + disadvantages: + - "参数较多,调优较复杂。" + applicable_scenarios: + - "金融风险预测。" + - "搜索引擎排序。" + + AdaBoostClassifier: + principle: "AdaBoost 是一种提升方法,它通过组合多个弱分类器来提高整体分类精度,赋予错误分类样本更高的权重。" + advantages: + - "能有效提升弱分类器的性能。" + - "适用于处理非均衡数据。" + disadvantages: + - "对噪声数据敏感。" + applicable_scenarios: + - "人脸检测。" + - "信用评分模型。" + + CatBoostClassifier: + principle: "CatBoost 是一种专为类别特征优化的梯度提升决策树方法,适用于处理高维稀疏数据。" + advantages: + - "对类别型特征处理能力强。" + - "训练速度快,支持 GPU 加速。" + disadvantages: + - "需要较长的训练时间。" + applicable_scenarios: + - "推荐系统。" + - "搜索排序。" + + LGBMClassifier: + principle: "LightGBM 是一种基于直方图优化的梯度提升树方法,优化了计算效率,适用于大规模数据。" + advantages: + - "计算速度快,适用于大规模数据集。" + - "对高维特征数据处理效果良好。" + disadvantages: + - "对小数据集容易过拟合。" + applicable_scenarios: + - "广告点击率预测。" + - "金融风控。" + + GaussianNB: + principle: "高斯朴素贝叶斯基于贝叶斯定理,假设特征服从高斯分布进行分类。" + advantages: + - "计算效率高,适用于大规模数据。" + - "对小数据集具有良好效果。" + disadvantages: + - "对特征的独立性假设较强,可能不适用于某些数据。" + applicable_scenarios: + - "文本分类。" + - "医疗诊断。" + + KNeighborsClassifier: + principle: "K 近邻(KNN)是一种基于距离度量的分类算法,通过找到最近的 K 个邻居来进行分类。" + advantages: + - "易于理解,实现简单。" + - "对异常值不敏感。" + disadvantages: + - "计算复杂度高,预测速度较慢。" + applicable_scenarios: + - "推荐系统。" + - "生物信息学分类。" + + MLPClassifier: + principle: "多层感知机(MLP)是一种前馈神经网络,通过多个隐藏层和非线性激活函数实现复杂分类任务。" + advantages: + - "能够学习复杂的非线性关系。" + - "适用于高维数据。" + disadvantages: + - "需要大量数据进行训练,容易过拟合。" + applicable_scenarios: + - "图像分类。" + - "语音识别。" + + GradientBoostingClassifier: + principle: "梯度提升决策树(GBDT)是一种集成学习方法,通过迭代训练多个决策树,使模型不断优化误差。" + advantages: + - "较强的泛化能力,适用于大规模数据集。" + - "支持特征重要性分析。" + disadvantages: + - "训练时间较长,调优复杂。" + applicable_scenarios: + - "搜索引擎排名。" + - "金融信用评分。" + + DNN: + principle: "深度神经网络(DNN)是一种多层神经网络,通过多层非线性变换提取数据的复杂特征。" + advantages: + - "适用于复杂非线性问题。" + - "能够处理大规模数据。" + disadvantages: + - "计算开销大,对硬件要求高。" + applicable_scenarios: + - "自动驾驶。" + - "自然语言处理。" + +regression_algorithms: + LinearRegression: + principle: "线性回归通过最小化数据点与回归线之间的误差平方和,来拟合一条最佳的直线。" + advantages: + - "实现简单,易于理解" + - "计算效率高,适用于小规模数据集" + disadvantages: + - "对异常值敏感" + - "只能建模线性关系,无法处理非线性数据" + applicable_scenarios: "适用于线性关系明确,且数据量适中的问题。" + + PolynomialRegression: + principle: "多项式回归是线性回归的一种扩展,利用多项式拟合数据,处理非线性关系。" + advantages: + - "能够拟合非线性关系" + - "灵活性强,能够处理复杂数据模式" + disadvantages: + - "容易过拟合,特别是在多项式度数较高时" + - "计算复杂度较高" + applicable_scenarios: "适用于非线性数据拟合,但需避免过拟合。" + + Ridge: + principle: "岭回归在最小化误差的同时,引入L2正则化,约束模型的复杂度。" + advantages: + - "有效防止过拟合" + - "适用于特征多的情况" + disadvantages: + - "对于特征相关性较强的数据效果较差" + - "结果解释性较差" + applicable_scenarios: "适用于特征多且存在共线性的线性回归问题。" + + Lasso: + principle: "Lasso回归通过L1正则化来限制模型的复杂度,可以实现特征选择。" + advantages: + - "能够进行特征选择,减少不相关特征" + - "减少模型的复杂度,避免过拟合" + disadvantages: + - "可能会导致某些特征完全被剔除,造成信息丢失" + - "对于高相关特征可能不稳定" + applicable_scenarios: "适用于需要特征选择或特征较多的线性回归问题。" + + ElasticNet: + principle: "弹性网络回归结合了Lasso回归的L1正则化和岭回归的L2正则化,能够处理更多情况。" + advantages: + - "能够处理相关特征,结合L1和L2的优点" + - "适用于特征数大于样本数的情形" + disadvantages: + - "计算复杂度较高" + - "可能需要调参来获得最佳效果" + applicable_scenarios: "适用于高维数据,且特征间存在线性相关的情况。" + + SVR: + principle: "支持向量回归(SVR)通过在高维空间中寻找一个最优超平面来拟合数据,能够处理非线性回归问题。" + advantages: + - "能够处理非线性数据,效果较好" + - "适用于高维数据" + disadvantages: + - "对超参数敏感,调参困难" + - "计算时间较长,尤其在大数据集上" + applicable_scenarios: "适用于数据具有非线性关系且数据量适中的问题。" + + DecisionTreeRegressor: + principle: "决策树回归通过构建树状结构来拟合数据,节点上的划分基于特征的不同值。" + advantages: + - "易于理解和可视化" + - "可以处理非线性关系" + disadvantages: + - "容易过拟合" + - "对噪声数据敏感" + applicable_scenarios: "适用于非线性回归,且对数据的复杂性有较高的容忍度。" + + RandomForestRegressor: + principle: "随机森林回归通过集成多棵决策树的结果来提高预测精度,能够处理高维数据。" + advantages: + - "不容易过拟合,适用于复杂问题" + - "能够处理缺失数据" + disadvantages: + - "计算复杂度较高" + - "结果难以解释" + applicable_scenarios: "适用于复杂的回归问题,尤其是特征维度较高的场景。" + + XGBRegressor: + principle: "XGBoost回归通过梯度提升算法(GBDT)优化损失函数,通过树的组合来预测目标值。" + advantages: + - "预测精度高,效果好" + - "处理大数据能力强" + disadvantages: + - "需要较长的训练时间" + - "对超参数敏感" + applicable_scenarios: "适用于大规模数据集且对预测精度要求较高的问题。" + + AdaBoostRegressor: + principle: "AdaBoost回归通过多次训练弱学习器并加权组合,改进模型的预测能力。" + advantages: + - "能够提高弱学习器的预测精度" + - "对噪声较为鲁棒" + disadvantages: + - "容易受到异常值影响" + - "对某些问题的性能较差" + applicable_scenarios: "适用于弱学习器的组合优化问题,特别是样本不平衡的场景。" + + CatBoostRegressor: + principle: "CatBoost回归基于梯度提升决策树(GBDT),特别优化了类别特征的处理。" + advantages: + - "能够处理类别特征,减少数据预处理" + - "高效且精度较高" + disadvantages: + - "训练时间较长" + - "参数调节较为复杂" + applicable_scenarios: "适用于包含大量类别特征的数据集,且数据量较大的问题。" + + LGBMRegressor: + principle: "LightGBM回归基于梯度提升决策树,使用了直方图优化算法以加速训练过程。" + advantages: + - "训练速度快,能够处理大规模数据" + - "内存占用较少,适合高维数据" + disadvantages: + - "需要调参以获得最佳效果" + - "模型解释性较差" + applicable_scenarios: "适用于大规模数据集,尤其是处理海量数据时效果优越。" + + MLPRegressor: + principle: "多层感知机回归是基于神经网络的回归模型,通过多个隐层来拟合复杂的非线性关系。" + advantages: + - "能够处理复杂的非线性关系" + - "在大数据和高维数据中表现良好" + disadvantages: + - "训练时间较长,且对计算资源要求较高" + - "容易过拟合,特别是在数据较少时" + applicable_scenarios: "适用于需要捕捉复杂非线性关系的回归问题,尤其在数据量大时效果较好。" + +clustering_algorithms: + KMeans: + principle: "K均值聚类通过最小化样本点到其最近簇中心的距离来将数据分为K个簇。" + advantages: + - "实现简单,计算效率高" + - "适用于大数据集" + disadvantages: + - "需要预先指定簇的数量K" + - "对初始中心点敏感,容易受到噪声影响" + applicable_scenarios: "适用于簇形状较为规则且数据量较大的聚类问题。" + + KMeansPlusPlus: + principle: "K-Means++是一种改进的初始化方法,通过选择更远离当前簇中心的样本点作为初始中心,提升K均值聚类的效果。" + advantages: + - "比传统K均值方法更稳定" + - "可以减少聚类结果的变异性" + disadvantages: + - "依然存在需要指定K的问题" + - "初始化仍然可能影响最终结果" + applicable_scenarios: "适用于K均值聚类方法,并且希望改进初始中心选择的场景。" + + HierarchicalKMeans: + principle: "层次化K均值结合了层次聚类和K均值聚类的方法,逐步将样本合并到已有簇中,形成层次化结构。" + advantages: + - "能够自动确定簇的数量" + - "生成的树状图有助于理解数据结构" + disadvantages: + - "计算量大,尤其是在数据量较大时" + - "对噪声和离群点敏感" + applicable_scenarios: "适用于不确定簇的数量且数据结构较复杂的情况。" + + FCM: + principle: "模糊C均值(FCM)允许每个数据点属于多个簇,基于隶属度来进行聚类。" + advantages: + - "能够处理数据点属于多个簇的情况" + - "适用于软聚类问题" + disadvantages: + - "对初始簇中心和隶属度设置较为敏感" + - "计算量大,尤其是簇数较多时" + applicable_scenarios: "适用于数据点可以属于多个簇的情况,如图像分割等问题。" + + AgglomerativeClustering: + principle: "层次聚类通过将相似度较高的样本逐步合并,最终形成树状结构(树状图)。" + advantages: + - "无需预先指定簇的数量" + - "能够处理任意形状的簇" + disadvantages: + - "计算复杂度较高,数据量大时效率低" + - "容易受到噪声的影响" + applicable_scenarios: "适用于不确定簇的数量且簇的形状较复杂的场景。" + + DBSCAN: + principle: "DBSCAN基于密度的聚类方法,通过寻找密集区域来划分簇,对于稀疏区域则标记为噪声点。" + advantages: + - "能够发现任意形状的簇" + - "不需要预先指定簇的数量,能够自动识别噪声" + disadvantages: + - "对参数设置敏感,尤其是邻域半径和最小样本数" + - "不适用于簇大小差异过大的数据集" + applicable_scenarios: "适用于具有明显密度差异的数据集,尤其适合处理含有噪声的数据。" + + GaussianMixture: + principle: "高斯混合模型(GMM)假设数据是由多个高斯分布的混合体组成,通过EM算法估计每个数据点的隶属概率。" + advantages: + - "能够处理重叠的簇" + - "可以自动估计每个簇的分布" + disadvantages: + - "计算复杂度高,容易陷入局部最优解" + - "需要预先指定簇的数量" + applicable_scenarios: "适用于需要拟合混合高斯分布的数据,尤其适合处理连续数据。" + + SpectralClustering: + principle: "谱聚类通过构造样本之间的相似度矩阵,并计算其特征值与特征向量来实现聚类。" + advantages: + - "能够处理复杂的簇结构" + - "适用于非凸形状的簇" + disadvantages: + - "计算量大,尤其在大数据集上效率低" + - "需要计算样本间的相似度矩阵,存储和计算成本较高" + applicable_scenarios: "适用于样本之间相似度较强,但簇形状复杂或非凸的聚类任务。" + + diff --git a/model/parameter.yaml b/model/parameter.yaml new file mode 100644 index 0000000..11a13bc --- /dev/null +++ b/model/parameter.yaml @@ -0,0 +1,650 @@ +classification_algorithms: + LogisticRegression: + parameters: + - name: "penalty" + type: "str" + default: "l2" + description: "用于正则化的惩罚项,可选 'l1', 'l2', 'elasticnet', 'none'。" + - name: "C" + type: "float" + default: "1.0" + description: "正则化强度的倒数,较小的值表示更强的正则化。" + - name: "solver" + type: "str" + default: "lbfgs" + description: "优化算法,可选 'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'。" + - name: "max_iter" + type: "int" + default: "100" + description: "最大迭代次数,控制优化收敛速度。" + + SVC: + parameters: + - name: "C" + type: "float" + default: "1.0" + description: "正则化参数,控制决策边界的松弛程度。" + - name: "kernel" + type: "str" + default: "rbf" + description: "核函数类型,可选 'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'。" + - name: "degree" + type: "int" + default: "3" + description: "多项式核函数的维度,仅当 kernel='poly' 时有效。" + - name: "gamma" + type: "str" + default: "scale" + description: "核函数系数,可选 'scale', 'auto' 或浮点数。" + - name: "max_iter" + type: "int" + default: "-1" + description: "最大迭代次数,-1 表示无限制。" + + DecisionTreeClassifier: + parameters: + - name: "criterion" + type: "str" + default: "gini" + description: "用于划分的准则,可选 'gini' 或 'entropy'。" + - name: "max_depth" + type: "int" + default: "None" + description: "树的最大深度,None 表示不限制。" + - name: "min_samples_split" + type: "int" + default: "2" + description: "内部节点再划分所需的最小样本数。" + - name: "min_samples_leaf" + type: "int" + default: "1" + description: "叶子节点包含的最小样本数。" + + RandomForestClassifier: + parameters: + - name: "n_estimators" + type: "int" + default: "100" + description: "森林中树的数量。" + - name: "criterion" + type: "str" + default: "gini" + description: "用于划分的准则,可选 'gini' 或 'entropy'。" + - name: "max_depth" + type: "int" + default: "None" + description: "树的最大深度,None 表示不限制。" + - name: "bootstrap" + type: "bool" + default: "True" + description: "是否进行自助采样。" + + XGBClassifier: + parameters: + - name: "n_estimators" + type: "int" + default: "100" + description: "树的数量。" + - name: "learning_rate" + type: "float" + default: "0.1" + description: "学习率,控制每棵树的贡献程度。" + - name: "max_depth" + type: "int" + default: "6" + description: "每棵树的最大深度。" + - name: "gamma" + type: "float" + default: "0" + description: "节点分裂所需的最小损失减少量。" + + AdaBoostClassifier: + parameters: + - name: "n_estimators" + type: "int" + default: "50" + description: "弱分类器的数量。" + - name: "learning_rate" + type: "float" + default: "1.0" + description: "更新权重时的缩放因子。" + - name: "algorithm" + type: "str" + default: "SAMME.R" + description: "提升算法,可选 'SAMME' 或 'SAMME.R'。" + + CatBoostClassifier: + parameters: + - name: "iterations" + type: "int" + default: "1000" + description: "训练的迭代次数。" + - name: "learning_rate" + type: "float" + default: "0.03" + description: "学习率,控制更新步长。" + - name: "depth" + type: "int" + default: "6" + description: "树的深度。" + + LGBMClassifier: + parameters: + - name: "num_leaves" + type: "int" + default: "31" + description: "树的最大叶子数。" + - name: "learning_rate" + type: "float" + default: "0.1" + description: "学习率。" + - name: "n_estimators" + type: "int" + default: "100" + description: "树的数量。" + + GaussianNB: + parameters: + - name: "var_smoothing" + type: "float" + default: "1e-9" + description: "加在方差上的小数,防止零方差问题。" + + KNeighborsClassifier: + parameters: + - name: "n_neighbors" + type: "int" + default: "5" + description: "最近邻的数量。" + - name: "weights" + type: "str" + default: "uniform" + description: "权重分配策略,可选 'uniform' 或 'distance'。" + - name: "algorithm" + type: "str" + default: "auto" + description: "搜索最近邻的算法。" + + MLPClassifier: + parameters: + - name: "hidden_layer_sizes" + type: "tuple" + default: "(100,)" + description: "隐藏层的神经元数量。" + - name: "activation" + type: "str" + default: "relu" + description: "激活函数,可选 'identity', 'logistic', 'tanh', 'relu'。" + - name: "solver" + type: "str" + default: "adam" + description: "优化算法,可选 'lbfgs', 'sgd', 'adam'。" + - name: "max_iter" + type: "int" + default: "200" + description: "最大迭代次数。" + + GradientBoostingClassifier: + parameters: + - name: "n_estimators" + type: "int" + default: "100" + description: "树的数量。" + - name: "learning_rate" + type: "float" + default: "0.1" + description: "学习率。" + - name: "max_depth" + type: "int" + default: "3" + description: "每棵树的最大深度。" + + +regression_algorithms: + LinearRegression: + parameters: + - name: "fit_intercept" + type: "bool" + default: "True" + description: "是否计算截距。" + - name: "normalize" + type: "bool" + default: "False" + description: "是否对数据进行归一化处理。(已弃用)" + - name: "copy_X" + type: "bool" + default: "True" + description: "是否复制输入数据。" + - name: "n_jobs" + type: "int" + default: "None" + description: "用于计算的并行作业数。" + + PolynomialRegression: + parameters: + - name: "degree" + type: "int" + default: "2" + description: "多项式的最高次数。" + - name: "interaction_only" + type: "bool" + default: "False" + description: "是否仅考虑特征之间的交互项。" + - name: "include_bias" + type: "bool" + default: "True" + description: "是否包含偏置项。" + + Ridge: + parameters: + - name: "alpha" + type: "float" + default: "1.0" + description: "正则化力度。" + - name: "fit_intercept" + type: "bool" + default: "True" + description: "是否计算截距。" + - name: "max_iter" + type: "int" + default: "None" + description: "最大迭代次数。" + - name: "tol" + type: "float" + default: "0.001" + description: "容忍误差。" + - name: "solver" + type: "str" + default: "auto" + description: "求解器选择。" + + Lasso: + parameters: + - name: "alpha" + type: "float" + default: "1.0" + description: "正则化参数。" + - name: "fit_intercept" + type: "bool" + default: "True" + description: "是否计算截距。" + - name: "max_iter" + type: "int" + default: "1000" + description: "最大迭代次数。" + - name: "tol" + type: "float" + default: "0.0001" + description: "收敛容忍度。" + - name: "selection" + type: "str" + default: "cyclic" + description: "特征选择方式,可选 'cyclic' 或 'random'。" + + ElasticNet: + parameters: + - name: "alpha" + type: "float" + default: "1.0" + description: "正则化参数。" + - name: "l1_ratio" + type: "float" + default: "0.5" + description: "L1正则化比例,控制L1和L2的混合比例。" + - name: "fit_intercept" + type: "bool" + default: "True" + description: "是否计算截距。" + - name: "max_iter" + type: "int" + default: "1000" + description: "最大迭代次数。" + - name: "tol" + type: "float" + default: "0.0001" + description: "收敛容忍度。" + + SVR: + parameters: + - name: "kernel" + type: "str" + default: "rbf" + description: "核函数类型,可选 'linear', 'poly', 'rbf', 'sigmoid'。" + - name: "C" + type: "float" + default: "1.0" + description: "惩罚参数。" + - name: "epsilon" + type: "float" + default: "0.1" + description: "epsilon不敏感损失中的参数。" + - name: "degree" + type: "int" + default: "3" + description: "多项式核函数的度数,仅当 kernel='poly' 时有效。" + - name: "gamma" + type: "str" + default: "scale" + description: "核函数系数。" + + DecisionTreeRegressor: + parameters: + - name: "criterion" + type: "str" + default: "squared_error" + description: "衡量分裂质量的指标。" + - name: "splitter" + type: "str" + default: "best" + description: "划分策略,可选 'best' 或 'random'。" + - name: "max_depth" + type: "int" + default: "None" + description: "树的最大深度。" + - name: "min_samples_split" + type: "int/float" + default: "2" + description: "内部节点再划分所需的最小样本数。" + - name: "min_samples_leaf" + type: "int/float" + default: "1" + description: "叶子节点最少样本数。" + + RandomForestRegressor: + parameters: + - name: "n_estimators" + type: "int" + default: "100" + description: "森林中树的数量。" + - name: "criterion" + type: "str" + default: "squared_error" + description: "衡量分裂质量的指标。" + - name: "max_depth" + type: "int" + default: "None" + description: "树的最大深度。" + - name: "min_samples_split" + type: "int" + default: "2" + description: "内部节点再划分所需的最小样本数。" + - name: "n_jobs" + type: "int" + default: "None" + description: "用于计算的并行作业数。" + + XGBRegressor: + parameters: + - name: "max_depth" + type: "int" + default: "3" + description: "树的最大深度。" + - name: "learning_rate" + type: "float" + default: "0.1" + description: "学习率。" + - name: "n_estimators" + type: "int" + default: "100" + description: "树的数量。" + - name: "objective" + type: "str" + default: "reg:squarederror" + description: "损失函数。" + - name: "subsample" + type: "float" + default: "1" + description: "采样比例。" + + AdaBoostRegressor: + parameters: + - name: "n_estimators" + type: "int" + default: "50" + description: "基学习器的数量。" + - name: "learning_rate" + type: "float" + default: "1.0" + description: "学习率。" + - name: "loss" + type: "str" + default: "linear" + description: "损失函数类型,可选 'linear', 'square', 'exponential'。" + + CatBoostRegressor: + parameters: + - name: "iterations" + type: "int" + default: "1000" + description: "迭代次数。" + - name: "learning_rate" + type: "float" + default: "0.03" + description: "学习率。" + - name: "depth" + type: "int" + default: "6" + description: "树的深度。" + - name: "l2_leaf_reg" + type: "float" + default: "3.0" + description: "L2正则化系数。" + - name: "loss_function" + type: "str" + default: "RMSE" + description: "损失函数。" + + LGBMRegressor: + parameters: + - name: "num_leaves" + type: "int" + default: "31" + description: "叶子节点数量。" + - name: "learning_rate" + type: "float" + default: "0.1" + description: "学习率。" + - name: "n_estimators" + type: "int" + default: "100" + description: "树的数量。" + - name: "objective" + type: "str" + default: "regression" + description: "目标函数。" + - name: "subsample" + type: "float" + default: "1.0" + description: "采样比例。" + + MLPRegressor: + parameters: + - name: "hidden_layer_sizes" + type: "tuple" + default: "(100,)" + description: "隐藏层的神经元数量和层数。" + - name: "activation" + type: "str" + default: "relu" + description: "激活函数,可选 'identity', 'logistic', 'tanh', 'relu'。" + - name: "solver" + type: "str" + default: "adam" + description: "权重优化算法。" + - name: "alpha" + type: "float" + default: "0.0001" + description: "L2正则化参数。" + - name: "max_iter" + type: "int" + default: "200" + description: "最大迭代次数。" + + +clustering_algorithms: + KMeans: + parameters: + - name: "n_clusters" + type: "int" + default: "8" + description: "簇的数量,K均值聚类的核心参数。" + - name: "init" + type: "str" + default: "k-means++" + description: "初始化方法,可选 'k-means++'、'random' 或数组类型。" + - name: "n_init" + type: "int" + default: "10" + description: "初始化次数,K均值算法会运行该次数,选择最优结果。" + - name: "max_iter" + type: "int" + default: "300" + description: "每次运行的最大迭代次数。" + - name: "tol" + type: "float" + default: "1e-4" + description: "算法收敛的容忍误差,当目标函数变化小于此值时,认为算法收敛。" + - name: "precompute_distances" + type: "bool" + default: "True" + description: "是否预计算距离矩阵(会增加计算量)。" + + KMeansPlusPlus: + parameters: + - name: "n_clusters" + type: "int" + default: "8" + description: "簇的数量。" + - name: "n_init" + type: "int" + default: "10" + description: "初始化次数。" + - name: "max_iter" + type: "int" + default: "300" + description: "最大迭代次数。" + - name: "tol" + type: "float" + default: "1e-4" + description: "容忍误差,用于判断算法是否收敛。" + + AgglomerativeClustering: + parameters: + - name: "n_clusters" + type: "int" + default: "2" + description: "簇的数量。" + - name: "affinity" + type: "str" + default: "euclidean" + description: "衡量样本间距离的方式,可选 'euclidean'、'manhattan'、'cosine'。" + - name: "memory" + type: "str/None" + default: "None" + description: "缓存路径,存储树状结构。" + - name: "linkage" + type: "str" + default: "ward" + description: "聚类方式,可选 'ward'(最小化平方误差)、'average'、'complete'。" + - name: "compute_full_tree" + type: "str" + default: "auto" + description: "是否计算完全树结构,'auto'为自动,'True'为计算,'False'为不计算。" + + FCM: + parameters: + - name: "n_clusters" + type: "int" + default: "2" + description: "簇的数量。" + - name: "m" + type: "float" + default: "2.0" + description: "模糊指数,控制隶属度的模糊程度,通常设置为2。" + - name: "max_iter" + type: "int" + default: "100" + description: "最大迭代次数。" + - name: "tol" + type: "float" + default: "1e-5" + description: "收敛容忍度,当隶属度变化小于此值时,认为算法收敛。" + - name: "random_state" + type: "int" + default: "None" + description: "随机种子,用于初始化隶属度矩阵。" + + DBSCAN: + parameters: + - name: "eps" + type: "float" + default: "0.5" + description: "邻域的最大距离,决定样本是否在同一簇中。" + - name: "min_samples" + type: "int" + default: "5" + description: "形成簇的最小样本数。" + - name: "metric" + type: "str" + default: "euclidean" + description: "计算距离的方式,可选 'euclidean', 'manhattan', 'cosine' 等。" + - name: "algorithm" + type: "str" + default: "auto" + description: "计算最近邻的方法,可选 'auto', 'ball_tree', 'kd_tree', 'brute'。" + - name: "leaf_size" + type: "int" + default: "30" + description: "对于BallTree或KDTree的叶子大小,影响效率。" + + GaussianMixture: + parameters: + - name: "n_components" + type: "int" + default: "1" + description: "高斯混合分布的组件数,表示簇的数量。" + - name: "covariance_type" + type: "str" + default: "full" + description: "协方差类型,可选 'full', 'tied', 'diag', 'spherical'。" + - name: "tol" + type: "float" + default: "1e-3" + description: "收敛容忍度,当对数似然变化小于此值时停止算法。" + - name: "max_iter" + type: "int" + default: "100" + description: "最大迭代次数。" + - name: "random_state" + type: "int" + default: "None" + description: "随机种子,用于初始化高斯混合模型的参数。" + + SpectralClustering: + parameters: + - name: "n_clusters" + type: "int" + default: "8" + description: "簇的数量。" + - name: "affinity" + type: "str" + default: "rbf" + description: "计算相似度的方式,可选 'rbf'、'nearest_neighbors'、'precomputed'。" + - name: "n_neighbors" + type: "int" + default: "10" + description: "对于 'nearest_neighbors' 相似度,使用的邻居数。" + - name: "gamma" + type: "float" + default: "1.0" + description: "用于计算径向基函数的gamma参数,影响相似度的计算。" + - name: "eigen_solver" + type: "str" + default: "auto" + description: "求解特征值的方式,可选 'arpack', 'lobpcg', 'auto'。" + - name: "random_state" + type: "int" + default: "None" + description: "随机种子,用于初始化谱聚类的计算。" + +