首页 > 解决方案 > find-s 算法的输出

问题描述

我正在尝试打印最具体的假设作为 find-S 算法的输出。

我得到错误的输出

我已经用python编写了一个基本代码来做到这一点。

import csv
with open('C:/Users/User_name/tennis.csv','r')as f:
 reader=csv.reader(f)   
 your_list=list(reader)

 h=[['0','0','0','0','0','0']]
 for i in your_list:
     print(i)
     if i[-1] =="True":
         j=0
         for x in i:
             if x !="True":
                 if x !=h[0][j] and h[0][j]=='0':
                     h[0][j]=x
                 elif x!=h[0][j] and h[0][j]!='0':
                     h[0][j]='?'
                 else:
                     pass
         j=j+1
 print("the maximally specific hypothesis is",h) 

['sky', 'temp', 'humidity', 'wind', 'water', 'forecast', 'target']
['sunny', 'warm', 'normal', 'strong', 'warm', 'same', 'True']
['sunny', 'warm', 'high', 'strong', 'warm', 'same', 'True']
['rainy', 'cold', 'high', 'strong', 'warm', 'change', 'False']
['sunny', 'warm', 'high', 'strong', 'cool', 'change', 'True']

最大特异性假设是

[['?', '0', '0', '0', '0', '0']]

这是输出,我得到但这是我应该得到的输出:

[['sunny','warm','?','strong','?','?']]

标签: pythoncsvmachine-learning

解决方案


您的代码几乎是正确的请移动循环j=j+1内部。for

import csv
with open('C:/Users/User_name/tennis.csv','r')as f:
 reader=csv.reader(f)   
 your_list=list(reader)

 h=[['0','0','0','0','0','0']]
 for i in your_list:
     print(i)
     if i[-1] =="True":
         j=0
         for x in i:
             if x !="True":
                 if x !=h[0][j] and h[0][j]=='0':
                     h[0][j]=x
                 elif x!=h[0][j] and h[0][j]!='0':
                     h[0][j]='?'
             j=j+1
 print("the maximally specific hypothesis is",h) 

['sky', 'temp', 'humidity', 'wind', 'water', 'forecast', 'target']
['sunny', 'warm', 'normal', 'strong', 'warm', 'same', 'True']
['sunny', 'warm', 'high', 'strong', 'warm', 'same', 'True']
['rainy', 'cold', 'high', 'strong', 'warm', 'change', 'False']
['sunny', 'warm', 'high', 'strong', 'cool', 'change', 'True']

推荐阅读