zoukankan      html  css  js  c++  java
  • 7.逻辑回归实践

    1.逻辑回归是怎么防止过拟合的?为什么正则化可以防止过拟合?(大家用自己的话介绍下)
    (1)通过正则化来防止过拟合
    (2)如图,过拟合后,得到的方程很拟合训练的数据,但是用测试集去测试时,则可能认为其不是那一类的,以至于无法预测新样本的标签。
    
    

     


    保留所有的特征变量,但是减少特征变量的数量级。
    假设我们使θ6,θ7.......,
    θn很小,那么参数x的影响就会很小,这时过拟合的公式结果就很接近好的情况。

     正则化是控制模型空间的一种办法,通过收缩,限制模型变得越来越大,牺牲样本内误差,降低模型的误差。

    2.用logistic回归来进行实践操作,数据不限。

      从阿里云-天池-数据集里面拿到的信用卡评估数据(https://tianchi.aliyun.com/dataset/dataDetail?dataId=60269

      需要导入以下库:

    from sklearn.linear_model import LogisticRegression #从机器学习中导入逻辑回归
    from sklearn.model_selection import train_test_split #拆分为训练集合测试集
    from sklearn.preprocessing import StandardScaler #标准化
    from sklearn.metrics import classification_report #可以得到召回率
    import matplotlib.pyplot as plt #画图
    import pandas as pd
    import numpy as np

      然后读取数据并且进行清洗:

    data = pd.read_csv("./机器学习/credit.csv", engine="python")# 读取数据
    data = data.iloc[:, 1:]  # 删去第一列
    data.describe().T  # 统计学描述
    # 从统计性描述可以看到,数据中有空值,好坏用户即用户的信用好坏,平均值为0.06,所以为0时,用户信用好,为1是用户信用不好
    data.isnull().sum()  # 查看每列的空值数
    # 数据清洗ing
    # 满了18岁才可以贷款,所以查看是否有18岁以下的贷款用户,若有则删除
    data[data['贷款时年龄'] < 18]
    data = data[data['贷款时年龄'] > 18]
    data['月收入'] = data['月收入'].fillna(data['月收入'].mean())
    data['受抚养人数'] = data['受抚养人数'].fillna(0)
    data.describe().T
    data = data.drop_duplicates()  # 删除重复项
    # 利用点图可以查看每个数据有无异常数据,然后进行清洗
    # plt.scatter(data['60-89天逾期次数'],data['60-89天逾期次数'])
    data = data[data['30-59天逾期次数'] < 6]
    data = data[data['负债率'] < 1]
    data = data[data['月收入'] < 500000]
    data = data[data['抵押贷款和不动产贷款数量'] < 20]
    data = data[data['60-89天逾期次数'] < 8]
    data = data[data['受抚养人数'] < 8]
    plt.bar([1, 0], [sum(data['好坏用户'] == 1), sum(data['好坏用户'] == 0)])
    View Code
    接下来进行数据集的拆分:
    # 拆分数据集
    x = data.iloc[:, 0:10]
    y = data.iloc[:, -1]
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)  # 拆分数据集
    # 标准化处理
    std = StandardScaler()
    x_train = std.fit_transform(x_train)
    x_test = std.transform(x_test)

      数据集准备好了以后,进行模型的建立、训练、预测:

        # 逻辑回归模型的建立、训练、预测
    lg_model = LogisticRegression()
    lg_model.fit(x_train, y_train)
    y_pre = lg_model.predict(x_test)

      最后进行模型的评估:

    train_score = lg_model.score(x_train, y_train)
    test_score = lg_model.score(x_test, y_test)
    print("训练数据集的准确率:", train_score, "测试数据集的准确率:", test_score)
    print("召回率:", classification_report(y_test, y_pre))
    print("测试样本中预测正确的个数: {0}/{1}".format(np.equal(y_pre, y_test).sum(), y_test.shape[0]))

  • 相关阅读:
    Spring boot返回值封装与业务异常
    Spring boot日志
    Rocket项目启动
    抉择
    C# 字符转ASCII码,ASCII码转字符 [转一下]
    xcode 学习笔记2:动态添加view
    unrecognized selector sent to instance 0x1b97e0' 问题解决记录
    xcode 学习笔记1:Interface Builder的使用
    xcode 学习笔记4:给WindowBase程序添加view
    xcode 学习笔记3:xcode目录结构
  • 原文地址:https://www.cnblogs.com/cyxxixi/p/12783723.html
Copyright © 2011-2022 走看看