Flutter sklite库机器学习

Flutter sklite库

  • Flutter机器学习
    • sklite介绍
    • sklite包引入
    • sklite使用

Flutter机器学习

最近逛Pub.Dev时偶然看到一个有关机器学习的插件,名称叫做sklite,作者是
[email protected],虽然已经有一段时间没更新了,但用起来效果还不错,我在这里记录一下使用心得。

sklite介绍

sklite库本身不能执行机器学习算法,它主要的功能是执行已训练好的分类模型。即使用SKlearn训练数据集,并导出model,将model放入Flutter工程中。Flutter端程序也很简单,使用predict(x)即可返回分类的结果。

sklite支持的分类算法

算法 中文 是否支持
KNeighborsClassifier K近邻分类器
SVC 支持向量机分类器
GaussianProcessClassifier 高斯过程分类器
DecisionTreeClassifier 决策树分类器
RandomForestClassifier 随机森林分类器
MLPClassifier MLP分类器
AdaBoostClassifier
GaussianNB 先验为高斯分布的朴素贝叶斯
QuadraticDiscriminantAnalysis 二次判别分析(QDA)
BernoulliNB 伯努利贝叶斯分类器
LinearSVC 线性支持向量机分类器

sklite包引入

这一步想必很多人都会操作,但这里还是多嘴一下吧。
打开工程目录下的“pubspec.yaml”文件,在对应位置写入下面的代码,两种引入方式二选一。
通过Flutter包管理平台引入

dependencies:
  sklite: ^0.0.1

通过GitHub代码托管平台引入

dependencies:
  sklite:
    git:
      url: https://github.com/axegon/SkLite-dart.git

sklite使用

要实现机器学习分类效果,首先需要训练好的模型,关于模型训练这里不作详细介绍,有空我会再写一篇关于sklearn的文章。
下面是一个生成模型的简单示例

from sklearn.svm import SVC
from sklearn.datasets import load_iris	# 鸢尾花数据集
from sklite import LazyExport
iris = load_iris()	# 导入数据集
X_train, y_train = iris.data, iris.target	
clf = SVC()
clf.fit(X_train, y_train)
lazy = LazyExport(clf)
lazy.save('svciris.json')	# 导出model

当我们有了model文件后,将其放在工程目录的assets文件夹下,这个assets文件夹默认是没有的,需要自行创建。
然后在“pubspec.yaml”文件中添加如下代码:
pubspec.yaml

name: sklearnapp
description: A new Flutter application.
version: 1.0.0+1
environment:
  sdk: ">=2.1.0 <3.0.0"
dependencies:
  flutter:
    sdk: flutter
  sklite: ^0.0.1
dev_dependencies:
  flutter_test:
    sdk: flutter
flutter:
  uses-material-design: true
  assets:
    - assets/svciris.json # 代码添加在这里

随后,我们就可以在程序中调用了。
main.dart

import 'package:flutter/material.dart';
import 'package:sklite/SVM/SVM.dart';
import 'package:sklite/utils/io.dart';
import 'dart:convert';

void main() => runApp(new MaterialApp(home: new HomePage(),);

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() {
    return new _HomePageState();
  }
}

class _HomePageState extends State {
  SVC svc;
  _HomePageState() {
  // 加载model
    loadModel("assets/svcmnist.json").then((x) {
      this.svc = SVC.fromMap(json.decode(x));
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Text('SVM算法演示'),
          RaisedButton(
            child: Text('开始机器学习'),
            onPressed: (){
              learnDemo();
            },
          ),
        ],
      ),
    );
  }

  learnDemo() async{
    List X = [5.0, 2.0, 3.5, 1.0];
    print("SVC");
    print(svc.predict(X));
  }
}

(咦,CSDN没法弄dart语言的语法高亮,真奇怪)
基本的用法就是这样了,上述代码都是sklite作者写的示例,我也只是复现了一下,有空再完善吧。
我是Flutter初学者,欢迎大家和我交流。
我的QQ:757122943

你可能感兴趣的:(Flutter学习笔记,机器学习,python,dart,flutter,android)