首页 > 其他 > 详细

7.逻辑回归实践

时间:2020-04-27 00:38:23      阅读:102      评论:0      收藏:0      [点我收藏+]
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]))

技术分享图片

7.逻辑回归实践

原文:https://www.cnblogs.com/cyxxixi/p/12783723.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!