学习之家教你的智能家居一切
learninghouse的Python项目详细描述
学习之家服务
简介
{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 class | API Reference for options |
---|---|
DecisionTreeClassifier | https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier |
RandomForestClassifier | https://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"
}'
- 项目
标签: