在SQL Server R Services中使用lm模型预测时遇'factor has new level'错误求助
解决SQL Server R Services中lm模型处理分类列的报错问题
嘿,刚接触R和SQL Server R Services的话,这个问题其实挺常见的!你遇到的错误根源在于:线性回归模型lm()没办法直接处理字符串类型的分类变量,也就是你输入里的company_name列——它是文本格式,lm()只认数值或者因子(factor)类型的自变量。
具体修正步骤
你只需要在R脚本里把company_name转换成因子类型,再训练模型就行,修改后的完整代码如下:
declare @script_r nvarchar(max) = ' dat <- InputDataSet; # 把文本分类列转成因子 dat$company_name <- as.factor(dat$company_name); model <- lm(first_commission_received_delay ~ ., data = dat); print(coef(model)); predict(model, dat); ' EXEC sp_execute_external_script @language =N'R' , @script = @script_r , @input_data_1 = @script_txt
为什么要这么做?
当你把文本列转成因子后,lm()会自动为每个不同的公司生成哑变量(dummy variables),这样模型就能把分类信息转换成可计算的数值特征,顺利完成回归计算了。
额外小提示
如果你的company_name有非常多不同的取值(比如上千个不同公司),直接转因子生成大量哑变量可能会导致模型过拟合或者计算效率下降,这时候你可能需要做一些特征工程(比如合并相似类别、用目标编码等),不过对于新手来说,先把转因子这一步搞定,解决当前报错是最优先的~
内容的提问来源于stack exchange,提问作者Anton Arkhipkin
相关产品推荐
相关产品推荐

