“闪电约会” 配对预测

该项目基于2002-2004年'闪电约会'实验数据,预测参与者是否会再次约会。涉及数据包括吸引力、忠实度等六个属性评分及人口统计信息等。任务包括配对预测、交叉验证和ROC曲线分析。通过处理缺失数据,重构数据并使用逻辑回归、SVM和随机森林模型,结果显示随机森林模型表现最佳。
摘要由CSDN通过智能技术生成

项目介绍

  • https://www.kaggle.com/annavictoria/speed-dating-experiment
  • 数据集采集自2002-2004"闪电约会"试验
    • 参与者有4分钟时间与异性交流
    • 4分钟后参与者回答是否愿意同该异性再次约会
    • 同时双方需要为对方的6个属性进行评分:
      1.吸引力(Attractiveness)
      2.忠实度(Sincerity)
      3.智慧(Intelligence)
      4.幽默(Fun)
      5.野心(Ambition)
      6.共同爱好(Shared Interest)
  • 该数据集也包括来自约会过程中不同时间点的问卷调查数据:
    1.人口同统计学信息(demographics)
    2.约会习惯(dating habits)
    3.自我认知(self-perception across key attributes)
    4.信仰(beliefs on what others find valuable in a mate)
    5.生活方式(lifestyle information)

项目任务

  • 配对预测
  • 掌握交叉验证
  • 掌握ROC曲线的绘制

分析步骤

1.查看数据集
2.明确分析目标
3.处理缺失数据
4.数据处理、重构

  • 每一行是一个参与者的属性,应该把两个人放在一行

5.选择模型、特征

  • 训练模型
  • 交叉验证

6.保存分析结果

  • 评价模型(ROC)
    为什么要用ROC? 因为参加配对的人有500对,可能只有百分之十的人会再次见面,所以10%是正样本,90%都是负样本。是一个极度不平衡的训练数据。

下面是项目代码:
主要是3个.py文件
mian.py

# -*- coding: utf-8 -*-
'''
Created on 8 Jan,2019

@author:Zhoukaixuan
'''
import os
import pandas as pd
import numpy as np
from zip_tools import get_dataset_filename,unzip
from pandas_tools import inspect_dataset,process_missing_data,get_pair_data
from ml_tools import select_features,banlance_samples,train_model,print_test_results,plot_roc
from sklearn.model_selection import train_test_split

#声明变量
dataset_path = 'e:/data' #数据集路径
zip_filename = 'Speed Dating Data.csv.zip' #zip文件名
zip_filepath = os.path.join(dataset_path,zip_filename) # zip文件路径
dataset_filename = get_dataset_filename(zip_filepath) #数据集文件名(在zip中)
dataset_filepath = os.path.join(dataset_path,dataset_filename) #数据集文件路径

#是否处理非平衡数据
is_process_unbalanced_data = True

#是否交叉验证
is_cv = True

#是否进行特征选择
is_feat_select = True

#设置随机种子
random_seed = 7
np.random.seed(random_seed)

def run_main():
    '''

    主函数
    '''
    ## 解压数据集
    print ("解压zip..."),
    unzip(zip_filepath, dataset_path)
    print ("完成.")

    ##1.查看数据集
    df_data = pd.read_csv(dataset_filepath,encoding='ISO-8859-1')
    inspect_dataset(df_data)

    ## 2.处理缺失数据
    df_data = process_missing_data(df_data)

    ## 3.数据处理构建特征,并重构数据
    #获取重构“成对”数据,以便放入预测模型
    pair_data,labels,features = get_pair_data(df_data)

    #进行特征选择
    if is_feat_select:
        pair_data,selected_features = select_features(pair_data,labels,features)
        print('选择的特征:')
        print(selected_features)

    n_pos_samples = labels[labels == 1].shape[0]
    n_neg_samples = labels[labels == 0].shape[0]
    print('正样本数:%d' % n_pos_samples)
    print('负样本数:%d' % n_neg_samples)

    #处理非平衡数据
    if is_process_unbalanced_data:
        pair_data,labels = banlance_samples(pair_data,labels)

    #分隔训练集和测试集
    X_train,X_test,y_train,y_test = train_test_split(pair_data,labels,
                                                     test_size=0.1,
                                                     random_state=random_seed)



    #4.训练模型,测试模型
    print ("逻辑回归模型:")
    logistic_model = train_model(X_train,y_train,
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值