• 逻辑回归预测瘀血阻络证||LogRegression 二分类 python3


    要求

    把数据集分为训练集和测试集使用逻辑回归训练、预测,得出相应的分类指标准确率accuracy,精确率precision,召回率recall,F1-score,并画出最终的ROC曲线,得出AUC值。

    数据格式

     664条样本   每条103个属性,最后一列为标签0f199dfa465e4712812d35fd667b2b2b.png

     结果

    07dd83507a234830a00dc6026c2f353a.png

     06b65ea40dd040028a269b479b45f7a0.png

    代码

    1. import pandas as pd
    2. from sklearn.linear_model import LogisticRegression
    3. from sklearn.model_selection import train_test_split
    4. from sklearn.preprocessing import StandardScaler
    5. from sklearn.metrics import classification_report, roc_curve, auc
    6. import matplotlib.pyplot as plt
    7. #根据标签和预测概率结果画出ROC图,并计算AUC值
    8. def acu_curve(y, prob):
    9. fpr, tpr, threshold = roc_curve(y, prob) ###计算真正率和假正率
    10. roc_auc = auc(fpr, tpr) ###计算auc的值
    11. plt.figure()
    12. lw = 2
    13. plt.figure(figsize=(6, 6))
    14. plt.plot(fpr, tpr, color='darkorange',
    15. lw=lw, label='ROC curve (area = %0.3f)' % roc_auc) ###假正率为横坐标,真正率为纵坐标做曲线
    16. plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
    17. plt.xlim([0.0, 1.0])
    18. plt.ylim([0.0, 1.05])
    19. plt.xlabel('False Positive Rate')
    20. plt.ylabel('True Positive Rate')
    21. plt.title('Receiver operating characteristic')
    22. plt.legend(loc="lower right")
    23. plt.show()
    24. # 二分类,逻辑回归 瘀血阻络证预测
    25. # 读取数据 (如果不指定标签名,会默认把第一行数据当成标签名)
    26. data = pd.read_excel(
    27. "症状_瘀血阻络证_data.xlsx"
    28. )
    29. # print(data)
    30. # 缺失值进行处理 (原始数据中的?表示缺失值) 本样本无缺失值
    31. # data = data.replace(to_replace='?', value=np.nan)
    32. # data = data.dropna() # 删除有缺少值的行
    33. # 分割数据集 划分为训练集和测试集
    34. x_train, x_test, y_train, y_test = train_test_split(data.iloc[:, 0:103], data.iloc[:, 103:104],
    35. test_size=0.125) # 前103为属性;最后一列是目标值
    36. # 7:1划分;83条测试、581条训练
    37. # 进行标准化处理 因为目标结果经过sigmoid函数转换成了[0,1]之间的概率,所以目标值不需要进行标准化。
    38. std = StandardScaler()
    39. x_train = std.fit_transform(x_train)
    40. x_test = std.transform(x_test)
    41. # 逻辑回归预测
    42. lg = LogisticRegression(C=1.0) # 默认使用L2正则化避免过拟合,C=1.0表示正则力度(超参数,可以调参调优)
    43. lg.fit(x_train, y_train.values.ravel())
    44. # 回归系数
    45. # print(lg.coef_)
    46. # 进行预测
    47. y_predict_p = lg.predict_proba(x_test)#结果用类别概率表示 方便画ROC图
    48. #print(y_predict_p)
    49. y_predict = lg.predict(x_test)#结果用标签值表示 方便利用classification_report()函数 输出模型评估报告
    50. #print(y_predict)
    51. # 用classification_report()函数 输出模型评估报告
    52. # 原始数据中的目标值:0表示非瘀血阻络证,1表示瘀血阻络证
    53. print(classification_report(y_test,y_predict))
    54. #调用函数画出ROC图,并计算AUC值
    55. acu_curve(y_test,y_predict_p[:,1:2])

    使用五折交叉验证

    结果展示

     

    更新一下

    1. import pandas as pd
    2. import warnings
    3. from sklearn.metrics import roc_curve
    4. from sklearn.preprocessing import StandardScaler
    5. from sklearn.model_selection import cross_val_predict
    6. from sklearn.linear_model import LogisticRegression
    7. from sklearn.model_selection import cross_val_score
    8. import matplotlib.pyplot as plt
    9. # 二分类 五折验证 逻辑回归 瘀血阻络证预测
    10. # 读取数据
    11. data = pd.read_excel(
    12. "症状_瘀血阻络证_data.xlsx"
    13. )
    14. # print(data)
    15. x_train = data.iloc[:, :-1] # 特征
    16. y_train = data.iloc[:, -1] # 标签
    17. # 进行标准化处理 因为目标结果经过sigmoid函数转换成了[0,1]之间的概率,所以目标值不需要进行标准化。
    18. std = StandardScaler()
    19. x_train = std.fit_transform(x_train)
    20. lr = LogisticRegression(random_state=填入你的随机数, tol=1e-6, C=0.01)
    21. lr_result = lr.fit(x_train, y_train.ravel())
    22. '''estimator:估计方法对象(分类器)
    23. X:数据特征(Features)
    24. y:数据标签(Labels)
    25. cv:几折交叉验证
    26. scoring='accuracy':准确率为结果的度量指标'''
    27. def muti_score(model):
    28. warnings.filterwarnings('ignore')
    29. accuracy = cross_val_score(model, x_train, y_train, scoring='accuracy', cv=5)
    30. precision = cross_val_score(model, x_train, y_train, scoring='precision', cv=5)
    31. recall = cross_val_score(model, x_train, y_train, scoring='recall', cv=5)
    32. f1_score = cross_val_score(model, x_train, y_train, scoring='f1', cv=5)
    33. auc = cross_val_score(model, x_train, y_train, scoring='roc_auc', cv=5)
    34. print("准确率:", accuracy.mean())
    35. print("精确率:", precision.mean())
    36. print("召回率:", recall.mean())
    37. print("F1_score:", f1_score.mean())
    38. print("AUC:", auc.mean())
    39. #画ROC
    40. y_scores = cross_val_predict(lr, x_train, y_train, cv=5, method='decision_function')
    41. fpr, tpr, thresholds = roc_curve(y_train, y_scores)
    42. plt.plot(fpr, tpr, linewidth=2, label='ROC(AUC=%0.3f)' % cross_val_score(lr, x_train, y_train, cv=5, scoring='roc_auc').mean(),
    43. color='darkorange')
    44. plt.xlabel('FPR') # False Positive Rate,假阳性率
    45. plt.ylabel('TPR') # True Positive Rate,真阳性率
    46. plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
    47. plt.ylim(0, 1.05)
    48. plt.xlim(0, 1.05)
    49. plt.legend(loc=4)
    50. plt.show()
    51. model = eval("lr")
    52. muti_score(model)

    注意点

    1、iloc函数使用方法(1条消息) iloc函数使用方法_阿狸狸_Nicole的博客-CSDN博客_.ilochttps://blog.csdn.net/qq_39368111/article/details/110435536

    2、 y_train.values.ravel()(1条消息) DataConversionWarning: A column-vector y was passed when a 1d array was expected. 问题解决_weixin_39223665的博客-CSDN博客https://blog.csdn.net/weixin_39223665/article/details/812687413、classification_report()(1条消息) python机器学习classification_report()函数 输出模型评估报告_侯小啾的博客-CSDN博客_classification_report函数https://blog.csdn.net/weixin_48964486/article/details/122881350

    4、 ROC图(1条消息) 关于ROC曲线画出来只有一个点_魔术师_的博客-CSDN博客_roc曲线只有一个拐点https://blog.csdn.net/maymay_/article/details/80042497

  • 相关阅读:
    Flameshot源码编译方法
    Python使用腾讯云SDK实现对象存储(上传文件、创建桶)
    分享一个 asp.net core 多文件分块同时上传的组件
    HBase与Hive集成
    DBA 数据库管理 . 内连接.外链接
    【MySQL】初识数据库
    JUC并发编程——各种锁的理解(基于狂神说的学习笔记)
    [AutoSar]工程中的cpuload陷阱(三)测试
    【C++编程语言】之 加号 左移 递增 赋值 关系 函数调用 的 运算符重载
    杠杆炒股中吸筹是什么?
  • 原文地址:https://blog.csdn.net/qq_54499870/article/details/127871118