scikit-fuzzy中trimf函数参数设置及输入0报错原因咨询
scikit-fuzzy trimf参数输入0报错原因
当你设置test_input['poor'] = fuzz.trimf(universe, [0, 0.2, 1])时,输入值0对应的隶属度为0——这是trimf函数的计算规则决定的:当输入x ≤ trimf参数的第一个值(这里是0)时,隶属度直接返回0。
你只定义了一条规则rule1 = ctrl.Rule(test_input['poor'], test_output['poor']),输入隶属度为0会导致这条规则触发后,输出test_output['poor']的隶属度也为0,最终所有输出的隶属度总和为0。
scikit-fuzzy默认采用**重心法(centroid)**做去模糊化,该方法的核心计算是(Σ(x_i * μ_i)) / (Σμ_i),当分母Σμ_i = 0时,就会触发除以0的错误。
而将trimf参数改为[0, 0, 1]时,输入0对应的隶属度为1,规则触发后输出的隶属度不为0,Σμ_i有有效数值,因此能正常完成去模糊化计算。
内容的提问来源于stack exchange,提问作者Abdulrehman Zia
相关产品推荐
相关产品推荐

