新手小白记录自己的学习过程,便于后续检查自省
1.在机器学习确定好指标最优的模型之后,这里最优模型用“lgbm”来代替,那我们制作web小程序的基底就是以lgbm构建的预测模型,我们制作的目的是希望便于临床医生预测患者是否会发生转移的可能性,因此临床医生只需要对某几个指标feature进行选择或者输入就可以获得一个0-1之间的值value,来展示风险的概率probability 。
2.因此在制作之前有几个问题(1)我们要让临床医生选择哪些特征呢?(2)如何让模型与页面实现交互呢?
3.针对第一个问题,我的理解是,在训练模型找出最优模型之前,也就是数据预处理的时候,我们已经对数据进行了特征筛选,这些留下来的特征也就是我们最后纳入模型里面,喂给模型去学习的特征,因此这些特征才是真正有意义的特征,因此无论是用方差法或者嵌入法或者是包装法特征筛选后,留下来的特征也就是我们需要展现在这个web网页上面的(这是我的一个理解不知道对不对)
因此我展现了我运用嵌入法筛选出来的几个变量,在嵌入法运用之后,可以df.head()一下,看一下表格里面还剩下几个row,几个column
4.第二个问题,如何实现模型与页面的交互呢,这里就需要运用到streamlit这个包,当然现在可能比较火的还有R shiny以及django?不知道是不是这两个,但是由于前面的代码都是用jupyter编辑的,所以我选择了streamlit,这样可能就是一脉相承不需要再更改代码了,目前还没有学会各个语言之间的交互,这样比较节省时间。当然弊端就是网上讲解streamlit的有点少,我主要是从csdn和b站上面看的教学视频,有时候直接百度也可以搜到一些。
废话不多说,如何交互呢?我的理解是把你模型的结果展现出来就好,因此我的一号文件是model.py,这个文件里面包含了我的逻辑回归模型,我的做法是直接把原来jupyter里,数据预处理+逻辑回归(建模,调参,数据呈现)这部分的代码扒出来了,当然调参的代码仁者见仁智者见智,如果调参在自己的jupyter里面跑的都很慢,那么如果想要让这个web程序运行的快可能也不太可能,我暂时没有运行调参的代码。此外这个文件里面需要多加几行代码便于后面的web.py这个文件能够直接调取模型(说实话不知道这个对不对哈哈)
lgbm_model.booster_.save_model('model.txt')
5.那么这个model.py已经伸出一只手就等着web程序与他对接了,因此与之对应的web的手就是下面这个代码
#首先别忘了加载包
import lightgbm as lgb
loaded_model = lgb.Booster(model_file='model.txt')
运行之后,两个文件就连接上了。
6.接下来是对二号文件的编辑,即web.py。这个文件编辑的主要就是如何呈现整个网页,如何能让医生或者用户输入的数值带入模型里面训练,这里不做赘述,但是我自己在编辑这个文件的时候,比较迷惑的点在于,如果说特征筛选之后有5个比较有价值的特征被保留了,但在预测的时候用户必须集齐这5个特征才能预测,少了一个特征都不行(还是缺少了人性化的一面这个机器学习,一个患者如果没钱可能就不会做那么多的检查)。需要提的一点,这个网页里面文字展现的顺序就是你在编辑的时候的顺序,因为展现文字用的是一个命令即st.write("xxxxxx")。
7.编辑完之后如何运行呢?
其实前面忘记说了,我的本来所有编码都是用的jupyter,但是不知道jupyter怎么运行以及新建py文件,我就只好下了一个pycharm 社区版,社区版是免费的,我觉得应该对小白来说其实也够用了。
我也看到我看b站他们用的好像是Vscode?不确定叫什么。但是反正pycharm是可以运行的。我的两个.py文件都是用pycharm写的,streamlit有个好处,就是你先pip安装streamlit之后,再 streamlit run是能直接能够出来一个本地localhost网页的,那边pycharm在运行,这边只要刷新网页就可以看到网页的实时变化。
#在prompt环境下安装streamlit
pip install streamlit
#安装完成后,先新建一个web.py文件,输入st.write("hello")然后继续在prompt环境下
streamlit run web.py
#如果安装成功是会弹出来一个页面并且上面写有hello的
8.综上,一个本地的streamlit网页就建立成功了,如何将本地网页产生公共url,让大家都可以访问呢?请移步下一篇文章
【记录1】如何将本地streamlit web程序生成公共Url(纯纯小白记录自用防忘)https://blog.csdn.***/2301_80103947/article/details/136230378?spm=1001.2014.3001.5502