当前位置:   article > 正文

机器学习:逻辑回归算法实现鸢尾花预测和银行数据处理

机器学习:逻辑回归算法实现鸢尾花预测和银行数据处理

1、鸢尾花预测

        1、特征选择

        

        2、对特征处理

  1. train=pd.read_excel("鸢尾花训练数据.xlsx")
  2. test=pd.read_excel("鸢尾花测试数据.xlsx")
  3. x_train=train[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
  4. y_train=train[["类型_num"]].values.ravel()

        3、选择逻辑回归作为分类模型。

  1. from sklearn.linear_model import LogisticRegression
  2. lr=LogisticRegression()

        4、模型训练

  1. lr.fit(x_train,y_train)
  2. train_predicted=lr.predict(x_train)

        5、评估模型的性能。常用的评估指标包括准确率、召回率、精确度、F1分数

  1. from sklearn import metrics
  2. print(metrics.classification_report(y_train,train_predicted))

  完整代码

  1. import pandas as pd
  2. from sklearn.linear_model import LogisticRegression
  3. train=pd.read_excel("鸢尾花训练数据.xlsx")
  4. test=pd.read_excel("鸢尾花测试数据.xlsx")
  5. x_train=train[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
  6. y_train=train[["类型_num"]].values.ravel()
  7. lr=LogisticRegression()
  8. lr.fit(x_train,y_train)
  9. train_predicted=lr.predict(x_train)
  10. from sklearn import metrics
  11. print(metrics.classification_report(y_train,train_predicted))
  12. x_test=test[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
  13. y_test=test[["类型_num"]].values.ravel()
  14. test_predicted=lr.predict(x_test)
  15. print(metrics.classification_report(y_test,test_predicted))
  16. predict=pd.read_excel("鸢尾花预测数据.xlsx")
  17. x_predict=predict[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
  18. predict_predicted=lr.predict(x_predict)
  19. print(predict_predicted)
  20. print(lr.predict_proba(x_predict))

2、银行数据

  1. 导入必要的库

    • numpy 和 pandas 用于数据处理。
    • LogisticRegression 用于创建逻辑回归模型。
    • StandardScaler 用于特征缩放。
    • train_test_split 用于分割数据集。
    • cross_val_score 用于交叉验证。
    • metrics 用于评估模型性能。                                                                                              
  2. 读取数据

    使用 pandas 的 read_csv 函数读取 "creditcard.csv" 文件。      
  3. 特征缩放

    使用 StandardScaler 对 "Amount" 特征进行标准化。                                                                                      
    1. data["Amount"]=scaler.fit_transform(data[["Amount"]])
    2. data=data.drop(["Time"],axis=1)

  4. 删除不需要的列

    删除 "Time" 列,因为它对于分类问题可能没有帮助。
  5. 分割数据集

    使用 train_test_split 将数据集分割为训练集和测试集。                                                       
    1. from sklearn.model_selection import train_test_split
    2. x=data.drop(["Class"],axis=1)
    3. y=data["Class"]
    4. x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=0)
                                                     
  6. 交叉验证寻找最佳正则化参数

    循环不同的正则化参数 C 值,使用交叉验证计算召回率,并找到最佳 C 值。                             
    1. from sklearn.model_selection import cross_val_score
    2. c=[0.01,0.1,1,10,100]
    3. d=[]
    4. for i in c:
    5. lr=LogisticRegression(penalty="l2",C=i,solver="lbfgs",max_iter=1000)
    6. score=cross_val_score(lr,x_train,y_train,cv=8,scoring="recall")
    7. scores=sum(score)/len(score)
    8. d.append(scores)
           
  7. 创建并训练逻辑回归模型

    使用找到的最佳 C 值创建逻辑回归模型,并用训练集数据训练模型。                                       
    1. best_c=c[np.argmax(d)]
    2. lr=LogisticRegression(penalty="l2",C=best_c,solver="lbfgs",max_iter=1000)
    3. lr.fit(x_train,y_train)
  8. 评估模型

    使用训练集和测试集数据评估模型性能,并打印分类报告。                                                   
    1. from sklearn import metrics
    2. predicted_train=lr.predict(x_train)
    3. print(metrics.classification_report(y_train,predicted_train))
    4. predicted_test=lr.predict(x_test)
    5. print(metrics.classification_report(y_test,predicted_test))
     
  9. 调整分类阈值并评估召回率

    循环不同的分类阈值 thresh,根据阈值调整预测结果,并计算每个阈值下的召回率。             
    1. thresh=[0.1,0.2,0.3,0.4,0.5,0.6]
    2. recalls=[]
    3. for j in thresh:
    4. y_predic_proba=lr.predict_proba(x_test)
    5. y_predic_proba=pd.DataFrame(y_predic_proba).drop([0],axis=1)
    6. y_predic_proba[y_predic_proba[[1]]>j]=1
    7. y_predic_proba[y_predic_proba[[1]]<=j]=0
    8. recall=metrics.recall_score(y_test,y_predic_proba[1])
    9. recalls.append(recall)
    10. print(j,recall)
           
  10. 打印结果:                                                                                                                                        

  11. 完整代码:

    1. import numpy as np
    2. import pandas as pd
    3. from sklearn.linear_model import LogisticRegression
    4. from sklearn.preprocessing import StandardScaler
    5. scaler=StandardScaler()
    6. data=pd.read_csv("creditcard.csv")
    7. data["Amount"]=scaler.fit_transform(data[["Amount"]])
    8. data=data.drop(["Time"],axis=1)
    9. from sklearn.model_selection import train_test_split
    10. x=data.drop(["Class"],axis=1)
    11. y=data["Class"]
    12. x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=0)
    13. from sklearn.model_selection import cross_val_score
    14. c=[0.01,0.1,1,10,100]
    15. d=[]
    16. for i in c:
    17. lr=LogisticRegression(penalty="l2",C=i,solver="lbfgs",max_iter=1000)
    18. score=cross_val_score(lr,x_train,y_train,cv=8,scoring="recall")
    19. scores=sum(score)/len(score)
    20. d.append(scores)
    21. best_c=c[np.argmax(d)]
    22. lr=LogisticRegression(penalty="l2",C=best_c,solver="lbfgs",max_iter=1000)
    23. lr.fit(x_train,y_train)
    24. from sklearn import metrics
    25. predicted_train=lr.predict(x_train)
    26. print(metrics.classification_report(y_train,predicted_train))
    27. predicted_test=lr.predict(x_test)
    28. print(metrics.classification_report(y_test,predicted_test))
    29. thresh=[0.1,0.2,0.3,0.4,0.5,0.6]
    30. recalls=[]
    31. for j in thresh:
    32. y_predic_proba=lr.predict_proba(x_test)
    33. y_predic_proba=pd.DataFrame(y_predic_proba).drop([0],axis=1)
    34. y_predic_proba[y_predic_proba[[1]]>j]=1
    35. y_predic_proba[y_predic_proba[[1]]<=j]=0
    36. recall=metrics.recall_score(y_test,y_predic_proba[1])
    37. recalls.append(recall)
    38. print(j,recall)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/1005657
推荐阅读
相关标签
  

闽ICP备14008679号