# simple_knn 0.0.1

Calculate k-nearest neighbours(knn) with a small subset of lodash with chaining capability

# simple_knn #

Calculate k-nearest neighbours(knn) with a small subset of lodash with chaining capability

## Features #

- Calculate knn from List<List<num>> data
- Provide several helper methods to handle List<List<num>> data
- normalize
- map
- sortByColumn
- zip
- sum
- and more

- Simple Unit Testing

## Usage #

```
num result = LodashChain.knn(trainingSet, LodashChain.initial(testPoint), k: k)
```

See example for a accuracy test loop.

```
import "package:simple_knn/simple_knn.dart";
import 'data.dart';
void main() {
final testSetSize = 100;
final List<List<num>> testSet = alldata.sublist(0, testSetSize);
final List<List<num>> trainingSet = alldata.sublist(0, testSetSize);
for (int k = 1; k < 7; k++) {
var successes = testSet.where((List<num> testPoint) =>
LodashChain.knn(trainingSet, LodashChain.initial(testPoint), k: k) ==
testPoint.last);
var accuracy = (successes.length / testSetSize) * 100;
print("result for k=$k: $accuracy%");
}
}
```

## Unit Testing #

- ✓ constructor and shape two dimensions filled
- ✓ constructor and shape only one dimension filled
- ✓ constructor and shape only scalar
- ✓ slice two dimensions
- ✓ slice only one dimension filled
- ✓ slice only scalar
- ✓ lastInChain two dimensions
- ✓ lastInChain only one dimension filled
- ✓ lastInChain only scalar
- ✓ first two dimensions
- ✓ first only one dimension filled
- ✓ first only scalar
- ✓ sortByColumn two dimensions
- ✓ sortByColumn only one dimension filled
- ✓ sortByColumn only scalar
- ✓ size two dimensions
- ✓ size only one dimension filled
- ✓ size only scalar
- ✓ map two dimensions
- ✓ map only one dimension filled
- ✓ map only scalar
- ✓ filter two dimensions
- ✓ filter only one dimension filled
- ✓ filter only scalar
- ✓ countByToPairs two dimensions
- ✓ countByToPairs only one dimension filled
- ✓ countByToPairs only scalar
- ✓ zip two dimensions
- ✓ zip only one dimension filled
- ✓ zip only scalar
- ✓ sum two dimensions
- ✓ sum only one dimension filled
- ✓ sum only scalar
- ✓ distance chain distance chain
- ✓ cloning two dimensions filled
- ✓ cloning only one dimension filled
- ✓ cloning only scalar
- ✓ normalize two dimensions filled
- ✓ normalize only one dimension filled
- ✓ normalize only scalar
- ✓ static min and max min
- ✓ static min and max max
- ✓ static distance simple v1 and v2
- ✓ static distance simple v1 and v2
- ✓ static initial of array length 4
- ✓ static initial of array length 1
- ✓ knn knn

The implementation is heavily influenced by the Udemy Course "Machine learning with javascript" by Stephen Grider. Thanks a lot to Stephen for his great explanations about knn using the Javascript lodash library.