You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从skfuzzy模糊逻辑模型输出值中获取对应类别?

解决skfuzzy输出值映射到模糊类别问题

要把skfuzzy计算出的去模糊化数值映射到对应的类别(reduction、optimal、increase),核心思路是获取该数值在每个输出模糊集中的隶属度,取隶属度最高的类别作为结果,具体实现步骤如下:

1. 确认输出模糊集的定义

先确保你已明确输出变量的模糊集定义,比如示例代码:

import skfuzzy as fuzz
import numpy as np

# 定义输出变量论域与三个模糊集
x_output = np.arange(0, 101, 1)
reduction = fuzz.trimf(x_output, [0, 0, 50])
optimal = fuzz.trimf(x_output, [30, 50, 70])
increase = fuzz.trimf(x_output, [50, 100, 100])

2. 计算输出值在各模糊集的隶属度

拿到去模糊化后的数值(如32.23415721908444),用fuzz.interp_membership计算它在每个模糊集中的隶属度:

output_value = 32.23415721908444

# 计算每个类别的隶属度
mem_reduction = fuzz.interp_membership(x_output, reduction, output_value)
mem_optimal = fuzz.interp_membership(x_output, optimal, output_value)
mem_increase = fuzz.interp_membership(x_output, increase, output_value)

3. 匹配隶属度最高的类别

将隶属度与类别一一对应,筛选出隶属度最高的类别:

# 构建隶属度-类别映射字典
membership_dict = {
    'reduction': mem_reduction,
    'optimal': mem_optimal,
    'increase': mem_increase
}

# 获取隶属度最高的类别
assigned_category = max(membership_dict, key=membership_dict.get)

4. 批量写入DataFrame

定义批量处理函数,将类别列添加到DataFrame中:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({'output_value': [32.23415721908444, 65.123, 20.45]})

# 封装隶属度计算与类别匹配逻辑
def get_category(val):
    mem_r = fuzz.interp_membership(x_output, reduction, val)
    mem_o = fuzz.interp_membership(x_output, optimal, val)
    mem_i = fuzz.interp_membership(x_output, increase, val)
    return max({'reduction': mem_r, 'optimal': mem_o, 'increase': mem_i}, key=lambda k: locals()[f'mem_{k[0]}'])

# 新增类别列
df['category'] = df['output_value'].apply(get_category)

注意事项

  • 若输出值在两个模糊集的隶属度接近或相等,可根据业务规则添加优先级判断(比如优先归为optimal类)。
  • 确保计算隶属度时使用的模糊集定义与模型初始化时完全一致,避免隶属度计算错误。

内容的提问来源于stack exchange,提问作者Rafał

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:18:08