Критика дизайн и качество этого класса TrainingData, используемые в программное обеспечение распознавания образов


Я работаю над проектом для программ распознавания образов. Программное обеспечение принимает изображение и возвращает набор наклеек (надписи-это просто строка текста), которые описывают содержание этого образа. Каждый возвращенный метки также связано со значением уверенности, который характеризует определенный алгоритм его присвоения меток.

Ключевым компонентом проекта является библиотека обучающих данных. Подготовка данных построенной с надписью изображений (изображений с помощью описательных строк текста уже связан с ними), передача изображений через кучу испытаний называются эвристикой, и с сохранением заданных значений, возвращаемых из тех эвристики наряду с соответствующей меткой. Эвристического значения, полученные от немеченого изображения по сравнению с библиотеки эвристических возвращаемых значений и меток, хранящихся в библиотеке обучающих данных, чтобы определить, какие метки должны быть связаны с немеченого изображения.

Прошу критики по дизайну и качеству следующий код:

/// <summary>Training data is a set of heuristics return values associated with their corresponding input label.
/// Traning data is used to take an unlabeled set of heuristic return values and to compare those return values
/// to labeled sets of heuristic return value and use that comparison to determine the most appropriate label to 
/// associate.</summary>
public class TrainingData {
    /// <summary>Key is the label associated with the value which is a set of heuristic return values</summary>
    private Dictionary<string, List<HeuristicReturnValues>> library 
                                                        = new Dictionary<string, List<HeuristicReturnValues>>();
    public void AddHeuristics(HeuristicReturnValues returnValuesToAdd) {
        if (returnValuesToAdd.Label == null) {
            throw new NullReferenceException(
                "Trying to add an unlabeled set of heuristic return values to the traning data library");
        }
        if(library.ContainsKey(returnValuesToAdd.Label)){
            //Add the heuristic return values to the list associated with the corresponding label in the library
            List<HeuristicReturnValues> listOfHeuristics = library[returnValuesToAdd.Label];
            listOfHeuristics.Add(returnValuesToAdd);
            library[returnValuesToAdd.Label] = listOfHeuristics;
        } else {
            //Create a new label entry in the library
            library.Add(returnValuesToAdd.Label, new List<HeuristicReturnValues>(){returnValuesToAdd});
        }
    }
    /// <summary>Take an unlabeled HeursiticReturnVaules object and compare it to each key value pair in the 
    /// library and return the best match as a LookupResult</summary>
    public List<LookupResult> PerformLookUp(HeuristicReturnValues unlabeledReturnValues) {
        if (unlabeledReturnValues.Label != null)
            throw new Exception("This guy is supposed to be unlabeled!");
        List<LookupResult> comparisonValues = new List<LookupResult>();
        foreach (var labeledReturnValues in library) {
            comparisonValues.Add(labeledReturnValues.Value.Compare(unlabeledReturnValues));
        }
        return comparisonValues.OrderBy(i => i.ConfidenceValue).ToList();
    }
}
/// <summary>Contains the label to be associated with the unlabeled HeuristicReturnValues and a confidence value
/// which reflects the algorithm's confidence in making that assignment.</summary>
public class LookupResult {
    public LookupResult(string lbl, double confidence) {
        this.Label = lbl;
        this.ConfidenceValue = confidence;
    }
    public string Label { get; set; }
    public double ConfidenceValue { get; set; }
}

public static class LibraryExtensionMethods {
    public static LookupResult Compare(this List<HeuristicReturnValues> labeledSet, 
                                                                    HeuristicReturnValues unlabledHeuristic) {
        //Implement a comparison between labeled and unlabeled heuristic return values
        throw new NotImplementedException();
    }
}


143
1
задан 1 июля 2011 в 09:07 Источник Поделиться
Комментарии
1 ответ

для начала, если вы собираетесь linqy, вы можете быть полностью linqy

public List<LookupResult> PerformLookUp(HeuristicReturnValues unlabeledReturnValues)
{
if (unlabeledReturnValues.Label != null)
throw new Exception("This guy is supposed to be unlabeled!");

return library.Select(labeled => labeled.Value.Compare(unlabeledReturnValues))
.OrderBy(i => i.ConfidenceValue).ToList();
}
}

используйте 'ВАР' немного больше, чтобы сделать вещи менее многословны.

В самом деле, если у вас есть для ReSharper, он поможет вам убрать множество этот код

переименовать 'PerformLookup', то, что ваш комментарий говорит, что это.. FindBestMatch или что-то подобное

1
ответ дан 4 июля 2011 в 02:07 Источник Поделиться