libsvm for python学習(2)
2568 ワード
svm_parameter
構造体でもあり、メンバーはその大きな列のパラメータです.このクラスを初期化するときに主に呼び出される関数はoptionを解析することである.例えば私が呼び出したとき、このような言葉があったかもしれません.
この文字列はライブラリでoptionと呼ばれ、optionになるのはデフォルト値があるからです.
optionを解析する操作は、switch case文に似ています.
ここから分かるように、受け入れられるoptionフォーマットは文字列またはlistであり、明らかに私の一番上の例は文字列である.
このクラスのポイントはパラメータにあります
構造体でもあり、メンバーはその大きな列のパラメータです.このクラスを初期化するときに主に呼び出される関数はoptionを解析することである.例えば私が呼び出したとき、このような言葉があったかもしれません.
param = svm_parameter('-s 3 -c 5 -h 0')
この文字列はライブラリでoptionと呼ばれ、optionになるのはデフォルト値があるからです.
optionを解析する操作は、switch case文に似ています.
def parse_options(self, options):
if isinstance(options, list):
argv = options
elif isinstance(options, str):
argv = options.split()
else:
raise TypeError("arg 1 should be a list or a str.")
self.set_to_default_values()
self.print_func = cast(None, PRINT_STRING_FUN)
weight_label = []
weight = []
i = 0
while i < len(argv):
if argv[i] == "-s":
i = i + 1
self.svm_type = int(argv[i])
elif argv[i] == "-t":
i = i + 1
self.kernel_type = int(argv[i])
elif argv[i] == "-d":
i = i + 1
self.degree = int(argv[i])
elif argv[i] == "-g":
i = i + 1
self.gamma = float(argv[i])
elif argv[i] == "-r":
i = i + 1
self.coef0 = float(argv[i])
elif argv[i] == "-n":
i = i + 1
self.nu = float(argv[i])
elif argv[i] == "-m":
i = i + 1
self.cache_size = float(argv[i])
elif argv[i] == "-c":
i = i + 1
self.C = float(argv[i])
elif argv[i] == "-e":
i = i + 1
self.eps = float(argv[i])
elif argv[i] == "-p":
i = i + 1
self.p = float(argv[i])
elif argv[i] == "-h":
i = i + 1
self.shrinking = int(argv[i])
elif argv[i] == "-b":
i = i + 1
self.probability = int(argv[i])
elif argv[i] == "-q":
self.print_func = PRINT_STRING_FUN(print_null)
elif argv[i] == "-v":
i = i + 1
self.cross_validation = 1
self.nr_fold = int(argv[i])
if self.nr_fold < 2:
raise ValueError("n-fold cross validation: n must >= 2")
elif argv[i].startswith("-w"):
i = i + 1
self.nr_weight += 1
nr_weight = self.nr_weight
weight_label += [int(argv[i-1][2:])]
weight += [float(argv[i])]
else:
raise ValueError("Wrong options")
i += 1
libsvm.svm_set_print_string_function(self.print_func)
self.weight_label = (c_int*self.nr_weight)()
self.weight = (c_double*self.nr_weight)()
for i in range(self.nr_weight):
self.weight[i] = weight[i]
self.weight_label[i] = weight_label[i]
ここから分かるように、受け入れられるoptionフォーマットは文字列またはlistであり、明らかに私の一番上の例は文字列である.
if isinstance(options, list):
argv = options
elif isinstance(options, str):
argv = options.split()
このクラスのポイントはパラメータにあります