《呆板学习》——逻辑回归(过采样)

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

什么是逻辑回归和过采样?



  • 逻辑回归是一种用于二分类(有时也用于多分类)问题的统计模型。它通过将线性组合的输入变量经过一个逻辑函数(如 sigmoid 函数)来预测事件发生的概率。然而,在实际数据集中,经常会碰到种别不平衡的问题,即差别种别的样本数目差异较大。比方,在一个疾病诊断数据集中,患病的人数大概远远少于未患病的人数。

  • 过采样


    主要意思就是将样本不平衡的样本比例,通过过采样增加样本使其变的平衡。
实例

   让我们通过实例,来先容过采样。
  1、实例内容

本次实例是对银行的数据进行分类的问题,数据部分内容为

共有28万多条数据。其中Time为无关特征,class为分类特征有两个分类分别为0、1,别的全部为特征变量。如图看看出Amount里的数据与其他特征的数据有区别,故此数据处理中要对Amount进行z标准化处理。
2、步调



  • 导入数据
  1. data = pd.read_csv('creditcard.csv', encoding='utf8', engine='python')
复制代码


  • 数据处理和划分
  1. from sklearn.preprocessing import StandardScaler
  2. # z标准化
  3. scaler = StandardScaler()
  4. a = data[['Amount']]
  5. data['Amount'] = scaler.fit_transform(data[['Amount']])
  6. data = data.drop(['Time'], axis=1)
  7. from sklearn.model_selection import train_test_split
  8. x_whole = data.drop('Class', axis=1)
  9. y_whole = data.Class
  10. x_train_w, x_test_w, y_train_w, y_test_w = train_test_split(x_whole, y_whole, test_size=0.2, random_state=0)
复制代码


  • 过采样处理并再次划分数据,画图查看
  1. from imblearn.over_sampling import SMOTE
  2. oversampler = SMOTE(random_state=0)
  3. os_x_train, os_y_train = oversampler.fit_resample(x_train_w, y_train_w)
  4. mpl.rcParams['font.sans-serif']=['Microsoft YaHei']
  5. mpl.rcParams['axes.unicode_minus']=False
  6. labels_count = pd.value_counts(os_y_train)
  7. plt.title('正负例样本数')
  8. plt.xlabel('类别')
  9. plt.ylabel('频数')
  10. labels_count.plot(kind='bar')
  11. plt.show()
  12. os_x_train_w, os_x_test_w, os_y_train_w, os_y_test_w = \
  13.     train_test_split(os_x_train, os_y_train, test_size=0.2, random_state=0)
复制代码


  • 挑选最优惩罚因子
  1. from sklearn.linear_model import LogisticRegression
  2. from sklearn.model_selection import cross_val_score
  3. scores = []
  4. c_param_range = [0.01, 0.1, 1, 10, 100]
  5. z = 1
  6. for i in c_param_range:
  7.     start_time = time.time()
  8.     lr = LogisticRegression(C=i, penalty='l2', solver='lbfgs', max_iter=1000)
  9.     score = cross_val_score(lr, os_x_train, os_y_train, cv=5, scoring='recall')
  10.     score_mean = sum(score) / len(score)
  11.     scores.append(score_mean)
  12.     end_time = time.time()
  13.     print(f'第{z}次。。。。')
  14.     print('time spend:{:.2f}'.format(end_time - start_time))
  15.     print(f'recall:{score_mean}')
  16.     z += 1
  17. best_c = c_param_range[np.argmax(scores)]
  18. print("最优惩罚因子为:{}".format(best_c))
复制代码



  • 训练模型
  1. lr = LogisticRegression(C=best_c,penalty='l2',solver='lbfgs',max_iter=1000)
  2. lr.fit(os_x_train_w,os_y_train_w)
复制代码


  • 测试模型并评估模型性能
  1. train_predicted =lr.predict(os_x_test_w)
  2. print(metrics.classification_report(os_y_test_w,train_predicted))
  3. train_predicted =lr.predict(x_test_w)
  4. print(metrics.classification_report(y_test_w,train_predicted))
复制代码

由于银行主要观察特征为1的人,宁愿原来为0的预测为1,也不愿判定错一个1的样本。故主要看召回率,从测试结果可以看出准确率照旧挺高的,也没有产生过拟合和欠拟合。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表