python实现Lasso回归分析(特征筛选、建模预测)

这篇具有很好参考价值的文章主要介绍了python实现Lasso回归分析(特征筛选、建模预测)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现功能:

python实现Lasso回归分析(特征筛选、建模预测)

输入结构化数据,含有特征以及相应的标签,采用Lasso回归对特征进行分析筛选,并对数据进行建模预测。

实现代码:

import numpy as np
import warnings
warnings.filterwarnings(action='ignore')
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import Lasso,LassoCV
import seaborn as sns
#=================================读取数据============================
class Solution():
    def __init__(self):
        feature = ['男', '女', '年龄', 'CCP-正常', 'CCP-异常', 'MCV-正常', 'MCV-异常',
'AKA-正常', 'AKA-异常','RF-正常', 'RF-异常', 'ANA-正常', 'ANA-异常',
'ds-DNA-正常', 'ds-DNA-异常','CRP-正常', 'CRP-异常', 'ESR-正常', 'ESR-异常',
'尿蛋白-正常', '尿蛋白-异常', '尿潜血-正常', '尿潜血-异常','尿红细胞-正常',
'尿红细胞-异常', 'WBC-正常', 'WBC-异常', 'Hb-正常', 'Hb-异常', 'PLT-正常',
'PLT-异常', 'ALT-正常', 'ALT-异常', 'AST-正常', 'AST-异常', 'r-GT-正常',
'r-GT-异常', 'TBIL-正常', 'TBIL-异常', 'ALB-正常','ALB-异常', 'GLB-正常',
'GLB-异常',  'A/O-正常', 'A/O-异常', 'Cr-正常', 'Cr-异常', 'BUN-正常',
'BUN-异常', 'UA-正常', 'UA-异常', 'C3-正常', 'C3-异常', 'C4-正常', 'C4-异常',
'IgA-正常', 'IgA-异常', 'IgG-正常','IgG-异常', 'IgE-正常', 'IgE-异常',
'晨僵正常', '晨僵异常', '发热正常', '发热异常', '雷诺正常', '雷诺异常',
'口眼干正常', '口眼干异常', '头晕正常', '头晕异常', '四肢正常', '四肢异常',
'胸部CT正常', '胸部CT异常', '肺结节正常', '肺结节异常', '诊断结果']
        self.feature=feature

    def Data_sort(self,file):
        data = pd.read_excel(file)
        data = pd.DataFrame(data)
        random_state_value = 90  # 随机种子
        sample_number = 82  # 欠采样数目
        def norm_2(x):
            return (x - stats['min']) / (stats['max']-stats['min'])
        gy_list=['年龄']
        data_gy=data[gy_list]
        stats = data_gy.describe()
        stats = stats.transpose()
        data[gy_list]=norm_2(data_gy)
        data1 = data[self.feature]
        data1 = data1.dropna()  # 删除含缺失值的行
        data1=data1[~data1['诊断结果'].isin([2])]
        print(len(data1))
        dataset=data1
        train_dataset = dataset.sample(frac=0.7, random_state=random_state_value)
        test_dataset = dataset.drop(train_dataset.index)
        print(len(test_dataset))
        train_dataset[train_dataset['诊断结果'].isin([1])]=\
            train_dataset[train_dataset['诊断结果'].isin([1])].iloc[:sample_number]
        train_NRA=train_dataset[train_dataset['诊断结果'].isin([0])]
        train_RA=train_dataset[train_dataset['诊断结果'].isin([1])]
        train_dataset=train_NRA.append(train_RA)
        train_dataset=train_dataset.sample(frac=1,random_state=0)
        print(len(train_dataset))
        train_labels =train_dataset.pop('诊断结果')
        test_labels =test_dataset.pop('诊断结果')
        return train_dataset,train_labels,test_dataset,test_labels

#=======================Lasso变量筛===============
    def optimal_lambda_value(self):
        Lambdas = np.logspace(-5, 2, 200)    #10的-5到10的2次方
        # 构造空列表,用于存储模型的偏回归系数
        lasso_cofficients = []
        for Lambda in Lambdas:
            lasso = Lasso(alpha = Lambda, normalize=True, max_iter=10000)
            lasso.fit(train_dataset, train_labels)
            lasso_cofficients.append(lasso.coef_)
        # 绘制Lambda与回归系数的关系
        plt.plot(Lambdas, lasso_cofficients)
        # 对x轴作对数变换
        plt.xscale('log')
        # 设置折线图x轴和y轴标签
        plt.xlabel('Lambda')
        plt.ylabel('Cofficients')
        # 显示图形
        plt.show()
        # LASSO回归模型的交叉验证
        lasso_cv = LassoCV(alphas = Lambdas, normalize=True, cv = 10, max_iter=10000)
        lasso_cv.fit(train_dataset, train_labels)
        # 输出最佳的lambda值
        lasso_best_alpha = lasso_cv.alpha_
        print(lasso_best_alpha)
        return lasso_best_alpha

    # 基于最佳的lambda值建模
    def model(self,train_dataset, train_labels,lasso_best_alpha):
        lasso = Lasso(alpha = lasso_best_alpha, normalize=True, max_iter=10000)
        lasso.fit(train_dataset, train_labels)
        return lasso

    def feature_importance(self,lasso):
        # 返回LASSO回归的系数
        dic={'特征':train_dataset.columns,'系数':lasso.coef_}
        df=pd.DataFrame(dic)
        df1=df[df['系数']!=0]
        print(df1)
        coef = pd.Series(lasso.coef_, index=train_dataset.columns)
        imp_coef = pd.concat([coef.sort_values().head(10), coef.sort_values().tail(10)])
        sns.set(font_scale=1.2)
        # plt.rc('font', family='Times New Roman')
        plt.rc('font', family='simsun')
        imp_coef.plot(kind="barh")
        plt.title("Lasso回归模型")
        plt.show()
        return df1

    def prediction(self,lasso):
        # lasso_predict = lasso.predict(test_dataset)
        lasso_predict = np.round(lasso.predict(test_dataset))
        print(sum(lasso_predict==test_labels))
        print(metrics.classification_report(test_labels,lasso_predict))
        print(metrics.confusion_matrix(test_labels, lasso_predict))
        RMSE = np.sqrt(mean_squared_error(test_labels,lasso_predict))
        print(RMSE)
        return RMSE

if __name__=="__main__":
    Object1=Solution()
    train_dataset, train_labels, test_dataset, test_labels=\
        Object1.Data_sort('F:\医学大数据课题\RA预测\RA预测\特征.xlsx')
    lasso_best_alpha=Object1.optimal_lambda_value()
    lasso=Object1.model(train_dataset, train_labels,lasso_best_alpha)
    feature_choose=Object1.feature_importance(lasso)
    RMSE=Object1.prediction(lasso)

实现效果:

# 绘制Lambda与回归系数的关系

python实现Lasso回归分析(特征筛选、建模预测)

   # 基于最佳的lambda值建模进行特征分析

python实现Lasso回归分析(特征筛选、建模预测)

   # 基于最佳的lambda值建模进行预测分析

python实现Lasso回归分析(特征筛选、建模预测)

喜欢记得点赞,在看,收藏,加关注(V订阅号:数据杂坛),将持续更新!

python实现Lasso回归分析(特征筛选、建模预测)  

 文章来源地址https://www.toymoban.com/news/detail-411724.html

 

到了这里,关于python实现Lasso回归分析(特征筛选、建模预测)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Python的LSTM网络实现单特征预测回归任务(PyTorch版)

    目录 一、数据集 二、任务目标 三、代码实现 1、从本地路径中读取数据文件 2、数据归一化 3、创建配置类,将LSTM的各个超参数声明为变量,便于后续使用 4、创建时间序列数据 5、划分数据集 6、将数据转化为PyTorch张量 7、将数据加载成迭代器 8、定义LSTM网络 9、创建LSTM实例

    2024年04月16日
    浏览(29)
  • 二分类结局LASSO回归筛选变量-R操作(从数据开始)+全套代码

    一、原始数据处理 如图: 结局status为二分类变量(用0,1表示) 自变量为X1~X15 数据文件名为mydata.csv 二、将数据导入Rstudio 点readr后点击browse找到你的数据,点击Import就可以导入进来了。 三、R代码进行LASSO回归 如下图所示,第一张图为plot(lasso_model,xvar=“lambda”)的结果 第

    2024年01月22日
    浏览(30)
  • 回归预测模型:MATLAB岭回归和Lasso回归

    1. 岭回归和Lasso回归的基本原理 1.1 岭回归: 岭回归(Ridge Regression) 是一种用于共线性数据分析的技术。共线性指的是自变量之间存在高度相关关系。岭回归通过在损失函数中添加一个L2正则项( λ ∑ j = 1 n β j 2 lambda sum_{j=1}^{n} beta_j^2 λ ∑ j = 1 n ​ β j 2 ​ )来减小回归

    2024年02月19日
    浏览(33)
  • 数学建模学习:岭回归和lasso回归

    线性回归 在多元线性回归模型中,估计回归系数使用的是OLS,并在最后讨论异方差和多重共线性对模型的影响。事实上,回归中自变量的选择大有门道,变量过多可能会导致多重共线性问题导致回归系数不显著,甚至造成OLS估计失效。 岭回归和lasso回归在OLS回归模型的损失函

    2024年02月08日
    浏览(34)
  • Python实现Lasso回归模型

    • Tibshirani(1996)提出了Lasso(The Least Absolute Shrinkage and Selectionator operator)算法。 • 通过构造一个一阶惩罚函数获得一个精炼的模型;通过最终确定一些指标(变量)的系数为零(岭回归估计系数等于0的机会微乎其微,造成筛选变量困难),解释力很强。 • 擅长处理具有多重共

    2024年01月22日
    浏览(43)
  • 【python】数据挖掘分析清洗——特征选择(特征筛选)方法汇总

    本文链接:https://blog.csdn.net/weixin_47058355/article/details/130400400?spm=1001.2014.3001.5501 数据挖掘系列: 缺失值处理方法汇总 离散化方法汇总 离群点(异常值)处理方法汇总 标准化(数据归一化)处理方法汇总 特征选择(特征筛选)方法汇总 特征选择筛选(降维)方法汇总 分类预测方法汇

    2024年02月15日
    浏览(44)
  • 【线性回归、岭回归、Lasso回归分别预测患者糖尿病病情】数据挖掘实验一

    任务描述:将“diabetes”糖尿病患者数据集划分为训练集和测试集,利用训练集分别结合线性回归、岭回归、Lasso回归建立预测模型,再利用测试集来预测糖尿病患者病情并验证预测模型的拟合能力。 具体任务要求如下: 搜集并加载“diabetes”患者糖尿病指数数据集。 定义训

    2024年02月07日
    浏览(37)
  • 特征筛选之特征递归消除法及Python实现

            特征递归消除法(Feature Recursive Elimination,简称RFE)是一种特征选择的算法,它通过反复训练模型,并剔除其中的弱特征,直到达到所需的特征数量。 该算法的步骤如下: 首先,将所有的特征都输入模型,得到模型的性能评价指标(比如准确率、F1得分等)。 然

    2024年02月13日
    浏览(31)
  • PYTHON链家租房数据分析:岭回归、LASSO、随机森林、XGBOOST、KERAS神经网络、KMEANS聚类、地理可视化...

    1 利用 python 爬取链家网公开的租房数据; 2 对租房信息进行分析,主要对房租相关特征进行分析,并搭建模型用于预测房租 ( 点击文末“阅读原文”获取完整 代码数据 ) 。 相关视频 利用上海链家网站租房的公开信息,着重对月租进行数据分析和挖掘。 此数据来自 Lianj

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包