大家好,我是北游。
信息时代,社会发展很快,在大模型满天飞的大背景下,一些机器学习算法也接踵而至,那么对于我们护理或医学研究领域有什么启发?对于这个问题,笔者翻阅了不少机器学习相关的SCI文献,总结了一点点小心得:拥抱新技术,积极探索交叉领域,精准化干预离不开精准且实用的预测模型。
一、LightGBM
二、训练、评价
既然说这个方法不需要事先对分类变量进行预处理,那么我们就试一试?
load(file = "datasets/train.rdata")
library('lightgbm')
library(Matrix)
output_vector = as.numeric(newtrain$Survived)-1
predata = lgb.Dataset(as.matrix(newtrain[,-1]),label = output_vector)
set.seed(123)
fit = lgb.train(
params = list(
objective = "binary",
num_leaves = 4L,
learning_rate = 0.1
),
data = predata
)
pp = predict(fit, as.matrix(newtrain[,-1]))
pp
classy = predict(fit, as.matrix(newtrain[,-1]),type = 'class')
library(caret)
confusionMatrix(as.factor(classy),
as.factor(output_vector))
准确率为08426,灵敏度与特异度分别是0.8978,0.7539,只能说是过得去,这可能是因为上面的代码没有调参(采用默认参数),LightGBM的超参数与xgboost是很类似的。如果想要调整超参数,可以用caret、mlr3、tidymodels等框架来做。其余的评价指标、可视化、模型解释可以参考我们前段时间发布的xgboost那篇文章。
三、手工编码分类变量
下面测试下,手动(也是用了函数)对分类数据进行编码(one-hot),看看模型的评价结果会有什么变化。
# lightgbm
load(file = "datasets/train.rdata")
library('lightgbm')
library(Matrix)
# 先转成数值,这里是转成了dgCMatrix格式
sparse_matrix = sparse.model.matrix(Survived ~ ., data = newtrain)[,-1]
head(sparse_matrix)
str(sparse_matrix)
# y
output_vector = as.numeric(newtrain$Survived)-1
# 特有格式封装一遍
predata = lgb.Dataset(sparse_matrix,label = output_vector)
fit = lgb.train(
params = list(
objective = "binary",
num_leaves = 4L,
learning_rate = 0.1
),
data = predata
)
pp = predict(fit, sparse_matrix)
classy = predict(fit, sparse_matrix,type = 'class')
library(caret)
confusionMatrix(as.factor(classy),as.factor(output_vector))
好像没好到哪里去:Accuracy : 0.8501、 Sensitivity : 0.9465 Specificity : 0.6953。有些低了,有些高了。也就是说用LightGBM的话,大胆放心用不做编码的数据,只要符合LightGBM模型本身对输入输出数据的要求就行。
觉得此文有帮助的话,可以帮忙点个赞吗?谢谢
主要参考来源:
官网https://lightgbm.readthedocs.io/en/latest/
相关R包(lightgbm)的帮助文档;
免责声明:仅供科研学习和分享,不做商业用途,如有侵权,请联系我们删除,谢谢。