SHOGUN
3.2.1
首页
相关页面
模块
类
文件
文件列表
文件成员
全部
类
命名空间
文件
函数
变量
类型定义
枚举
枚举值
友元
宏定义
组
页
src
shogun
multiclass
KNN.h
浏览该文件的文档.
1
/*
2
* This program is free software; you can redistribute it and/or modify
3
* it under the terms of the GNU General Public License as published by
4
* the Free Software Foundation; either version 3 of the License, or
5
* (at your option) any later version.
6
*
7
* Written (W) 2006 Christian Gehl
8
* Written (W) 1999-2009 Soeren Sonnenburg
9
* Written (W) 2011 Sergey Lisitsyn
10
* Written (W) 2012 Fernando José Iglesias García, cover tree support
11
* Copyright (C) 2011 Berlin Institute of Technology and Max-Planck-Society
12
*/
13
14
#ifndef _KNN_H__
15
#define _KNN_H__
16
17
#include <stdio.h>
18
#include <
shogun/lib/common.h
>
19
#include <
shogun/io/SGIO.h
>
20
#include <
shogun/features/Features.h
>
21
#include <
shogun/distance/Distance.h
>
22
#include <
shogun/machine/DistanceMachine.h
>
23
24
namespace
shogun
25
{
26
27
class
CDistanceMachine;
28
55
class
CKNN
:
public
CDistanceMachine
56
{
57
public
:
58
MACHINE_PROBLEM_TYPE
(
PT_MULTICLASS
)
59
60
61
CKNN
();
62
69
CKNN
(int32_t k,
CDistance
* d,
CLabels
* trainlab);
70
virtual
~CKNN
();
71
76
virtual
EMachineType
get_classifier_type
() {
return
CT_KNN
; }
77
87
SGMatrix<index_t>
nearest_neighbors
();
88
94
virtual
CMulticlassLabels
*
apply_multiclass
(
CFeatures
* data=NULL);
95
97
virtual
float64_t
apply_one
(int32_t vec_idx)
98
{
99
SG_ERROR
(
"for performance reasons use apply() instead of apply(int32_t vec_idx)\n"
)
100
return
0;
101
}
102
106
SGMatrix<int32_t>
classify_for_multiple_k
();
107
113
virtual
bool
load
(FILE* srcfile);
114
120
virtual
bool
save
(FILE* dstfile);
121
126
inline
void
set_k
(int32_t k)
127
{
128
ASSERT
(k>0)
129
m_k
=k;
130
}
131
136
inline
int32_t
get_k
()
137
{
138
return
m_k
;
139
}
140
144
inline
void
set_q
(
float64_t
q)
145
{
146
ASSERT
(q<=1.0 && q>0.0)
147
m_q
= q;
148
}
149
153
inline
float64_t
get_q
() {
return
m_q
; }
154
158
inline
void
set_use_covertree
(
bool
use_covertree)
159
{
160
m_use_covertree
= use_covertree;
161
}
162
166
inline
bool
get_use_covertree
()
const
{
return
m_use_covertree
; }
167
169
virtual
const
char
*
get_name
()
const
{
return
"KNN"
; }
170
171
protected
:
176
virtual
void
store_model_features
();
177
181
virtual
CMulticlassLabels
*
classify_NN
();
182
186
void
init_distance
(
CFeatures
* data);
187
196
virtual
bool
train_machine
(
CFeatures
* data=NULL);
197
198
private
:
199
void
init();
200
213
int32_t choose_class(
float64_t
* classes, int32_t* train_lab);
214
227
void
choose_class_for_multiple_k(int32_t* output, int32_t* classes, int32_t* train_lab, int32_t step);
228
229
protected
:
231
int32_t
m_k
;
232
234
float64_t
m_q
;
235
237
bool
m_use_covertree
;
238
240
int32_t
m_num_classes
;
241
243
int32_t
m_min_label
;
244
246
SGVector<int32_t>
m_train_labels
;
247
};
248
249
}
250
#endif
SHOGUN
机器学习工具包 - 项目文档