学习之家教你的智能家居一切

learninghouse的Python项目详细描述


学习之家服务

LicenseBuild StatusPyPI versionDocker version

learningHouse Logo

简介

{str{strong为他们的家庭提供了一个易于学习的机器API服务。在

添加此项目处于非常早期状态的时刻。请通过打开一个issue来分享你想教你的家的想法。非常期待您的反馈。

安装

使用pip安装和更新。在

pip install -U learninghouse

使用docker安装和更新

^{pr2}$

准备配置目录

mkdir -p models/config
mkdir -p models/training
mkdir -p models/compiled

config目录将模型配置保存为json文件。在

服务使用目录training和{}来存储数据。在

训练数据存储为csv文件,训练后的模型存储为对象转储。在

模型配置

配置以json格式存储。在

示例模型

这个模型决定了它是否太暗以至于必须打开灯。它使用太阳方位角和太阳仰角,雨量计和一小时的气压趋势。它使用一种叫做随机森林分类器的机器学习算法。在

存储a黑暗.json在models/config目录中包含以下内容:

{
    "estimator": {
        "class": "RandomForestClassifier",
        "options": {
            "n_estimators": 100, 
            "random_state": 0
        }
    },
    "features": ["azimuth", "elevation", "rain_gauge", "pressure_trend_1h"],
    "categoricals": ["pressure_trend_1h"],
    "dependent": "darkness",
    "dependent_encode": true,
    "test_size": 0.2
}

配置参数

估计器

首先,我们选择一个带有scikit learn估计器类的estimator,并使用API描述中的选项对其进行配置。在

目前learningHouse服务支持scikit learn的以下估计器:

Estimator classAPI Reference for options
DecisionTreeClassifierhttps://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier
RandomForestClassifierhttps://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier

功能

features的列表是必需的,它包含模型用来做出决定的传感器数据的名称

分类

为了正确工作,需要对包含categorical的所有features数据进行编码,以使模型正确工作。列出包含此类分类数据的特征列表。在

在这个例子中,feature压力趋势是一个范畴特征,包括上升、恒定和下降。在

根据经验,您可以假设所有字符串值都是范畴。

因变量

dependent变量是必须存在于训练数据中并由模型预测的变量。在

dependent变量必须编码为数字。如果它不是一个数字,而是一个字符串或布尔值(true/false),如示例所示。将dependent_encode设置为true。在

测试尺寸

LearningHouse服务仅使用部分培训数据来培训模型。{cd12>将使用模型的另一部分的分数。在

使用介于0.01和0.99之间的浮点数表示百分比,或使用整数指定绝对数目的数据点。在

对于一开始,20%(0.2)的test_size应该可以。在

准确度在80%到90%之间是一个很好的得分。你的模型下面有点欠拟合,上面有点过拟合,这使得它不能很好地预测新的数据点。在

当至少有10个数据点时,将开始对模型进行培训。在

运行服务

在控制台中键入learninghouse,以开发模式启动服务。默认情况下,服务将在端口5000上运行。在开发模式下,您将看到一些日志信息。在

要在生产模式下启动服务并指定侦听地址和端口,请使用以下命令:

learninghouse --production --host 127.0.0.1 --port 5001

生产模式下的服务尚未记录任何内容

与docker一起运行:

docker run --name learninghouse --rm -v models:/learninghouse/models -p 5000:5000 learninghouseservice/learninghouse:latest

列车模型

对于培训,请向服务部门发送PUT请求:

# URL is http://host:5000/training/:modelname
curl --location --request PUT 'http://localhost:5000/training/darkness' \
--header 'Content-Type: application/json' \
--data-raw '{
    "azimuth": 321.4441223144531,
    "elevation": -19.691608428955078,
    "rain_gauge": 0.0,
    "pressure_trend_1h": "falling",
    "darkness": true
}'

您可以发送一个包含UNIX时间戳的数据集的字段timestamp,或者服务会将此信息与当前时间一起添加。服务一般在训练数据集中的一些与时间相关的字段可以用作features。在

要使用现有数据训练模型(例如,在服务更新之后),请使用不带数据的POST请求:

# URL is http://host:5000/training/:modelname
curl --location --request POST 'http://localhost:5000/training/darkness'

要获取有关已培训模型的信息,请使用get请求:

# URL is http://host:5000/info/:modelname
curl --location --request GET 'http://localhost:5000/info/darkness'

预测

要使用模型预测新数据集,请发送POST请求:

# URL is http://host:5000/info/:modelname
curl --location --request POST 'http://localhost:5000/prediction/darkness' \
--header 'Content-Type: application/json' \
--data-raw '{    
    "azimuth": 321.4441223144531,
    "elevation": -19.691608428955078,
    "rain_gauge": 0.0,
    "pressure_trend_1h": "falling"
}'

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像