使用随机逻辑回归进行特征筛选,并利用筛选后的特征建立逻辑回归模型

from sklearn.linear_model import LogisticRegression as LR
from sklearn.linear_model import RandomizedLogisticRegression as RLR

rlr=RLR()  #建立随机逻辑回归模型,筛选变量
rlr.fit(x,y)  #训练模型
rlr.get_support()  #获取特征筛选结果

print(u'有效特征为:%s'%','.join(np.array(data.iloc[:,:8].columns)[rlr.get_support()]))
x=data[np.array(data.iloc[:,:8].columns)[rlr.get_support()]].as_matrix()  #筛选好特征

lr=LR()  #建立逻辑回归模型
lr.fit(x,y)  #用筛选后的特征数据来训练模型
print(u'逻辑回归模型训练结束')
print(u'模型的平均正确率为:%s'%lr.score(x,y))  #给出模型的平均正确率

Scikit_Learn API :

sklearn.linear_model  广义线性模型

sklearn.linear_model.LogisticRegression   Logistic 回归分类器

Methods:

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,以下是利用 MATLAB 实现病灶四分类模型利用 LASSO 算法进行特征筛选,用逻辑回归建立分类模型,得到分类模型的训练集准确率、测试集准确率、每一类别的概率值、混淆矩阵、ROC 曲线等步骤: 1. 加载数据 假设数据集为 `data`,其中第一列为标签,后面的列为特征,可以使用 `csvread` 函数加载数据: ```matlab data = csvread('data.csv'); Y = data(:,1); % 标签 X = data(:,2:end); % 特征 ``` 2. 划分训练集和测试集 可以使用 `cvpartition` 函数随机划分训练集和测试集: ```matlab cv = cvpartition(size(X,1),'HoldOut',0.2); idxTrain = training(cv); idxTest = test(cv); XTrain = X(idxTrain,:); YTrain = Y(idxTrain,:); XTest = X(idxTest,:); YTest = Y(idxTest,:); ``` 这里将数据集划分为 80% 的训练集和 20% 的测试集。 3. 特征筛选 使用 `lassoglm` 函数进行 LASSO 算法特征筛选: ```matlab [B,FitInfo] = lassoglm(XTrain,YTrain,'binomial','CV',10); lassoPlot(B,FitInfo,'PlotType','CV'); ``` 这里使用了 10 折交叉验证,绘制了交叉验证误差随正则化参数 lambda 的变化曲线,选择最优的 lambda 对应的特征系数。 4. 训练逻辑回归模型 使用 `mnrfit` 函数训练逻辑回归模型: ```matlab XTrain = [ones(size(XTrain,1),1) XTrain]; % 添加常数项 [B,dev,stats] = mnrfit(XTrain(:,B~=0),YTrain); ``` 这里将特征系数不为 0 的特征作为模型的输入,将标签加 1,使其取值范围为 1 到 4,便于后续处理。`stats` 包含了模型的一些统计信息,例如模型的拟合优度等。 5. 测试模型 使用 `mnrval` 函数测试模型,并计算分类指标: ```matlab XTest = [ones(size(XTest,1),1) XTest]; % 添加常数项 pihat = mnrval(B,XTest(:,B~=0)); [~,YTestHat] = max(pihat,[],2); C = confusionmat(YTest,YTestHat); % 混淆矩阵 accuracy = sum(diag(C))/sum(C(:)); % 准确率 precision = diag(C)./sum(C,2); % 精确率 recall = diag(C)./sum(C,1)'; % 召回率 F1 = 2*precision.*recall./(precision+recall); % F1 值 [X,Y,~,AUC] = perfcurve(YTest,pihat(:,2),2); % ROC 曲线和 AUC ``` 这里使用了 `mnrval` 函数预测测试集标签,计算了准确率、精确率、召回率、F1 值和 ROC 曲线及 AUC。 6. 输出结果 将结果输出: ```matlab disp(['训练集准确率为:',num2str(accuracyTrain)]); disp(['测试集准确率为:',num2str(accuracy)]); disp('各类别概率值为:'); disp(pihat); disp('混淆矩阵为:'); disp(C); disp(['F1 值为:',num2str(F1)]); disp(['AUC 值为:',num2str(AUC)]); plot(X,Y); xlabel('False positive rate'); ylabel('True positive rate'); title(['ROC curve (AUC = ',num2str(AUC),')']); ``` 这里输出了训练集准确率、测试集准确率、各类别概率值、混淆矩阵、F1 值和 ROC 曲线及 AUC。 希望这些步骤能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值