SHOGUN
v3.0.0
Main Page
Related Pages
Modules
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
src
shogun
multiclass
KNN.h
Go to the documentation of this file.
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
Machine Learning Toolbox - Documentation