跳到内容

基础

此文件是 TPOT 库的一部分。

TPOT 当前版本在 Cedars-Sinai 开发,开发者包括: - Pedro Henrique Ribeiro (https://github.com/perib, https://www.linkedin.com/in/pedro-ribeiro/) - Anil Saini (anil.saini@cshs.org) - Jose Hernandez (jgh9094@gmail.com) - Jay Moran (jay.moran@cshs.org) - Nicholas Matsumoto (nicholas.matsumoto@cshs.org) - Hyunjun Choi (hyunjun.choi@cshs.org) - Gabriel Ketron (gabriel.ketron@cshs.org) - Miguel E. Hernandez (miguel.e.hernandez@cshs.org) - Jason Moore (moorejh28@gmail.com)

TPOT 最初版本主要在宾夕法尼亚大学开发,开发者包括: - Randal S. Olson (rso@randalolson.com) - Weixuan Fu (weixuanf@upenn.edu) - Daniel Angell (dpa34@drexel.edu) - Jason Moore (moorejh28@gmail.com) - 以及许多其他慷慨的开源贡献者

TPOT 是自由软件:您可以根据自由软件基金会发布的 GNU 宽通用公共许可证的条款重新分发和/或修改它,可以是许可证的第 3 版,也可以是(由您选择)任何更高版本。

分发 TPOT 是希望它有用,但没有任何担保;甚至没有对适销性或特定用途适用性的暗示担保。详情请参阅 GNU 宽通用公共许可证。

您应该随 TPOT 一起收到了 GNU 宽通用公共许可证的副本。如果未收到,请参阅 https://gnu.ac.cn/licenses/

SklearnIndividual

基础: BaseIndividual

源代码位于 tpot/search_spaces/base.py
class SklearnIndividual(tpot.BaseIndividual):

    def __init_subclass__(cls):
        cls.crossover = cls.validate_same_type(cls.crossover)


    def __init__(self,) -> None:
        super().__init__()

    def mutate(self, rng=None):
        return

    def crossover(self, other, rng=None, **kwargs):
        return 

    @final
    def validate_same_type(func):

        def wrapper(self, other, rng=None, **kwargs):
            if not isinstance(other, type(self)):
                return False
            return func(self, other, rng=rng, **kwargs)

        return wrapper

    def export_pipeline(self, **kwargs) -> BaseEstimator:
        return

    def unique_id(self):
        """
        Returns a unique identifier for the individual. Used for preventing duplicate individuals from being evaluated.
        """
        return self

    #TODO currently TPOT population class manually uses the unique_id to generate the index for the population data frame.
    #alternatively, the index could be the individual itself, with the __eq__ and __hash__ methods implemented.

    # Though this breaks the graphpipeline. When a mutation is called, it changes the __eq__ and __hash__ outputs.
    # Since networkx uses the hash and eq to determine if a node is already in the graph, this causes the graph thing that 
    # This is a new node not in the graph. But this could be changed if when the graphpipeline mutates nodes, 
    # it "replaces" the existing node with the mutated node. This would require a change in the graphpipeline class.

    # def __eq__(self, other):
    #     return self.unique_id() == other.unique_id()

    # def __hash__(self):
    #     return hash(self.unique_id())

    #number of components in the pipeline
    def get_size(self):
        return 1

    @final
    def export_flattened_graphpipeline(self, **graphpipeline_kwargs) -> tpot.GraphPipeline:
        return flatten_to_graphpipeline(self.export_pipeline(), **graphpipeline_kwargs)

unique_id()

返回个体的唯一标识符。用于防止重复个体被评估。

源代码位于 tpot/search_spaces/base.py
def unique_id(self):
    """
    Returns a unique identifier for the individual. Used for preventing duplicate individuals from being evaluated.
    """
    return self