From a3730c4840e71a4ae5ce2a1b88aab041bfd1e5cb Mon Sep 17 00:00:00 2001 From: mogu-king <1547976000@qq.com> Date: Sun, 3 Nov 2024 04:33:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20function.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- function.py | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/function.py b/function.py index bc95f6b..8182d90 100644 --- a/function.py +++ b/function.py @@ -1,5 +1,5 @@ import numpy as np - +from sklearn.tree import DecisionTreeClassifier """ 实验说明: - 自行编写实现数据加载与预测病马死亡的对率回归算法。 @@ -16,6 +16,7 @@ import numpy as np id = "202210423208" name = "刘义天" + # 加载数据并添加非线性特征 def load_data(filepath): """ @@ -78,20 +79,46 @@ def train_logreg(X, y, learning_rate=0.01, num_iterations=1000, regularization_s return weights -# 使用 0.4 阈值的对率回归预测函数 -def predict_logreg(inX, weights): +# 决策树训练函数 +def train_decision_tree(X, y): """ - 对率回归预测函数。 + 训练简单的决策树模型。 + + Args: + - X (numpy array): 特征数据 + - y (numpy array): 标签数据 + + Returns: + - clf (DecisionTreeClassifier): 训练好的决策树模型 + """ + clf = DecisionTreeClassifier(max_depth=5, random_state=42) + clf.fit(X, y) + return clf + + +# 融合预测函数 +def predict_fusion(inX, weights, clf): + """ + 融合对率回归和决策树的预测结果。 Args: - inX (numpy array): 输入待分类的样本。 - - weights (numpy array): 训练得到的权重。 + - weights (numpy array): 对率回归的权重。 + - clf (DecisionTreeClassifier): 训练好的决策树模型。 Returns: - - int: 预测的分类标签。 + - int: 最终预测的分类标签。 """ - probability = 1 / (1 + np.exp(-np.dot(inX, weights))) - return 1 if probability >= 0.4 else 0 + # 对率回归预测 + probability_logreg = 1 / (1 + np.exp(-np.dot(inX, weights))) + prediction_logreg = 1 if probability_logreg >= 0.4 else 0 + + # 决策树预测 + prediction_tree = clf.predict(inX.reshape(1, -1))[0] + + # 融合投票 + final_prediction = 1 if (prediction_logreg + prediction_tree) >= 1 else 0 + return final_prediction if __name__ == "__main__": # 以下代码可用于测试,可自行随意修改