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

1、鸢尾花预测

        1、特征选择

        

        2、对特征处理

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

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

from sklearn.linear_model import LogisticRegression
lr=LogisticRegression()

        4、模型训练

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

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

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

  完整代码

import pandas as pd
from sklearn.linear_model import LogisticRegression
train=pd.read_excel("鸢尾花训练数据.xlsx")
test=pd.read_excel("鸢尾花测试数据.xlsx")
x_train=train[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
y_train=train[["类型_num"]].values.ravel()

lr=LogisticRegression()
lr.fit(x_train,y_train)
train_predicted=lr.predict(x_train)
from sklearn import metrics
print(metrics.classification_report(y_train,train_predicted))

x_test=test[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
y_test=test[["类型_num"]].values.ravel()
test_predicted=lr.predict(x_test)
print(metrics.classification_report(y_test,test_predicted))

predict=pd.read_excel("鸢尾花预测数据.xlsx")
x_predict=predict[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
predict_predicted=lr.predict(x_predict)
print(predict_predicted)
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" 特征进行标准化。                                                                                      
    data["Amount"]=scaler.fit_transform(data[["Amount"]])
    data=data.drop(["Time"],axis=1)

  4. 删除不需要的列

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

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

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

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

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

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

  11. 完整代码:

    import numpy as np
    import pandas as pd
    from sklearn.linear_model import LogisticRegression
    from sklearn.preprocessing import StandardScaler
    scaler=StandardScaler()
    data=pd.read_csv("creditcard.csv")
    data["Amount"]=scaler.fit_transform(data[["Amount"]])
    data=data.drop(["Time"],axis=1)
    
    from sklearn.model_selection import train_test_split
    x=data.drop(["Class"],axis=1)
    y=data["Class"]
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=0)
    
    from sklearn.model_selection import cross_val_score
    c=[0.01,0.1,1,10,100]
    d=[]
    for i in c:
        lr=LogisticRegression(penalty="l2",C=i,solver="lbfgs",max_iter=1000)
        score=cross_val_score(lr,x_train,y_train,cv=8,scoring="recall")
        scores=sum(score)/len(score)
        d.append(scores)
    best_c=c[np.argmax(d)]
    lr=LogisticRegression(penalty="l2",C=best_c,solver="lbfgs",max_iter=1000)
    lr.fit(x_train,y_train)
    from sklearn import metrics
    predicted_train=lr.predict(x_train)
    print(metrics.classification_report(y_train,predicted_train))
    
    predicted_test=lr.predict(x_test)
    print(metrics.classification_report(y_test,predicted_test))
    
    thresh=[0.1,0.2,0.3,0.4,0.5,0.6]
    recalls=[]
    for j in thresh:
        y_predic_proba=lr.predict_proba(x_test)
        y_predic_proba=pd.DataFrame(y_predic_proba).drop([0],axis=1)
        y_predic_proba[y_predic_proba[[1]]>j]=1
        y_predic_proba[y_predic_proba[[1]]<=j]=0
        recall=metrics.recall_score(y_test,y_predic_proba[1])
        recalls.append(recall)
        print(j,recall)

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值