【python 数据分析】练习6:决策树+神经网络—用户相亲成功可能性的预测模型

本文介绍了一个婚恋网站公司如何利用决策树和神经网络,建立新用户相亲成功可能性的预测模型。通过调整超参数优化模型,并对特定特征进行分箱处理,对比模型效果。数据集可在GitHub上找到。
摘要由CSDN通过智能技术生成
数据集及源码https://github.com/JCATHoney/python-data-analysis

一、问题描述

一家婚恋网站公司希望根据已注册用户的历史相亲数据,建立新用户相亲成功可能性的预测模型,数据存放在“date_data2.csv”中。

二、数据集


#income-月均收入(元)

#attractive-由婚恋网站评定出的个人魅力值,分值从0-100。

#assets-资产(万元)

#edueduclass-教育等级:1=小学,2=初中;3=高中,4=本科,5=硕士及以上

#Dated-是否相亲成功:1代表成功

三、解题步骤

  1. 使用决策树、神经网络建立相亲成功预测模型并通过调节超参数进行模型调优,比较两个模型的优劣。

  2. 对income,attractive,assets进行分箱(5分箱)处理,用分箱后的数据建模,并比较与1)步骤中模型的表现是否有差异。

3.1疑问点记录
  • predict_proba
    返回的是一个 n 行 k 列的数组, 第 i 行 第 j 列上的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为1
train_est_p=clf.predict_proba(train_data)[:,1]#每个样本预测为1(成功)的概率 
  • 极差标准化-MinMaxScaler
    神经网络算法必须先将数据进行极差标准化

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaler.fit(train_data)

scaled_train_data = scaler.transform(train_data)
scaled_test_data = scaler.transform(test_data)
  • 分箱操作
    分为两类:等深分箱(qcut)等宽分箱(cut)
  1. 等深分箱 :每箱的样本量基本一致(有点分位数的意思)
    以数量为划分标准(100份数据分5个箱子,每个差不多20份数据),返回的是区间。

  2. 等宽分箱 :样本量之间有相同的宽度,自定义划分边界,并且返回等级标签。
    eg:假如我们有一组学生成绩,我们需要将这些成绩分为不及格(0-59)、及格(60-70)、良(71-85)、优(86-100)这几组

tips:qcut和cut结合使用,用qcut把握数据分布情况,来确定cut的边界。因为后续建模不能用一个区间来计算,要转换为等级标签

处理连续变量,进项等深分箱
data0['income'] = pd.qcut(data0.income,5)  #  将income字段切分为数量(大致)相等的5段
data0['attractive'] = pd.qcut(data0.attractive,5) 
data0['assets'] = pd.qcut(data0.assets,5) 
#%%
data0['Dated'].groupby(data0['income']).agg(['count', 'mean'])
'''
                    count      mean
income                             
(2999.999, 4500.0]     24  0.125000
(4500.0, 6500.0]       21  0.380952
(6500.0, 9000.0]       20  0.650000
(9000.0, 11800.0]      15  0.600000
(11800.0, 34000.0]     20  0.850000

                count      mean
attractive                    
(0.999, 21.0]     23  0.304348
(21.0, 39.5]      23  0.521739
(39.5, 65.5]      29  0.482759
(65.5, 79.0]       7  0.571429
(79.0, 99.5]      18  0.722222

                 count      mean
assets                         
(3.999, 25.0]      23  0.000000
(25.0, 52.6]       17  0.058824
(52.6, 94.0]       26  0.576923
(94.0, 145.0]      15  1.000000
(145.0, 486.0]     19  1.000000
 
'''
#%%
bins1 = [0, 4500, 6500, 9000, 11800, 35000]
bins2 = [0, 21, 40, 65, 80, 100]
bins3 = [0, 25, 53, 94, 145, 490]

data0['income'] = pd.cut(data0['income'],bins1,labels=False)  
data0['attractive'] = pd.cut(data0['attractive'],bins2,labels
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值