谷歌的GooglePlay的推荐模型Wide and Deep Learning 模型,目前已经提供了tensorflow的开源版本。

本文使用keras完成:

#coding: utf-8
'''
用keras写的google Wide&&Deep model
'''

import pandas as pd
from keras.models import Sequential
from keras.layers import Dense, Merge
from sklearn.preprocessing import MinMaxScaler

#所有的数据列
COLUMNS = [
    "age", "workclass", "fnlwgt", "education", "education_num", "marital_status",
    "occupation", "relationship", "race", "gender", "capital_gain", "capital_loss",
    "hours_per_week", "native_country", "income_bracket"
]

#标签列
LABEL_COLUMN = "label"

#类别型特征变量
CATEGORICAL_COLUMNS = [
    "workclass", "education", "marital_status", "occupation", "relationship",
    "race", "gender", "native_country"
]

#连续值特征变量
CONTINUOUS_COLUMNS = [
    "age", "education_num", "capital_gain", "capital_loss", "hours_per_week"
]

#加载文件
def load(filename):
    with open(filename, 'r') as f:
        skiprows = 1 if 'test' in filename else 0
        df = pd.read_csv(
            f, names=COLUMNS, skipinitialspace=True, skiprows=skiprows, engine='python'
        )
        #缺省值处理
        df = df.dropna(how='any', axis=0)
    return df

#预处理
def preprocess(df):
    df[LABEL_COLUMN] = df['income_bracket'].apply(lambda x: ">50K" in x).astype(int)
    df.pop("income_bracket")
    y = df[LABEL_COLUMN].values
    df.pop(LABEL_COLUMN)
    
    df = pd.get_dummies(df, columns=[x for x in CATEGORICAL_COLUMNS])

# TODO: 对特征进行选择,使得网络更高效
    
    # TODO: 特征工程,比如加入交叉与组合特征
    # from sklearn.preprocessing import PolynomialFeatures
    # X = PolynomialFeatures(degree=2, interaction_only=True, include_bias=False).fit_transform(X)
    
    df = pd.DataFrame(MinMaxScaler().fit_transform(df), columns=df.columns)

X = df.values
    return X, y

def main():
    df_train = load('E:\\adult.data')
    df_test = load('E:\\adult.test')
    df = pd.concat([df_train, df_test])
    train_len = len(df_train)
    
    X, y = preprocess(df)
    X_train = X[:train_len]
    y_train = y[:train_len]
    X_test = X[train_len:]
    y_test = y[train_len:]
    
    #Wide部分
    wide = Sequential()
    wide.add(Dense(1, input_dim=X_train.shape[1]))
    
    #Deep部分
    deep = Sequential()
    # TODO: 添加embedding层
    deep.add(Dense(input_dim=X_train.shape[1], output_dim=100, activation='relu'))
    #deep.add(Dense(100, activation='relu'))
    deep.add(Dense(input_dim=100, output_dim=32, activation='relu'))
    #deep.add(Dense(50, activation='relu'))
    deep.add(Dense(input_dim=32, output_dim=8))
    deep.add(Dense(1, activation='sigmoid'))
    
    #Wide和Deep拼接
    model = Sequential()
    model.add(Merge([wide, deep], mode='concat', concat_axis=1))
    model.add(Dense(1, activation='sigmoid'))
    
    #编译模型
    model.compile(
        optimizer='rmsprop',
        loss='binary_crossentropy',
        metrics=['accuracy']
    )
    
    #模型训练
    model.fit([X_train, X_train], y_train, nb_epoch=10, batch_size=32)
    
    #loss与准确率评估
    loss, accuracy = model.evaluate([X_test, X_test], y_test)
    print('\n', 'test accuracy:', accuracy)
    
if __name__ == '__main__':
    main()

Google WideDeep Model相关推荐

  1. WideDeep Model、Wide Model(LR)、Deep Model、DeepFm Model、NFM Model复现笔记

    声明:本模型复现笔记记录自己学习过程,如果有错误请各位老师批评指正. 本周复现了Wide&Deep Model.Wide Model.Deep Model.DeepFm Model.NFM M ...

  2. 深度学习02——Softmax、DNN、WideDeep Model

    说明:本系列是七月算法深度学习课程的学习笔记 1 背景介绍 深度学习在图片上的应用:功能上讲:图像分类和物体识别:应用上:可以用来分类图片:白菜形状的玉器摆件.白菜.大白菜:图片搜索:给照片打标签:识 ...

  3. Softmax, DNN, WideDeep Model

    ​​​​​​

  4. 推荐系统入门(四):WideDeep(附代码)

    推荐系统入门(四):Wide&Deep(附代码) 目录 推荐系统入门(四):Wide&Deep(附代码) 引言 点击率预估简介 FM它不香吗 1.Wide&Deep模型 2. ...

  5. Model Search,了解一下?

    选自 googleblog 作者:Hanna Mazzawi等 机器之心编译 编辑:魔王.杜伟 为了帮助研究者自动.高效地开发最佳机器学习模型,谷歌开源了一个不针对特定领域的 AutoML 平台.该平 ...

  6. AutoML大提速,谷歌开源自动化寻找最优ML模型新平台Model Search

    作者|魔王.杜伟 来源|机器之心 为了帮助研究者自动.高效地开发最佳机器学习模型,谷歌开源了一个不针对特定领域的 AutoML 平台.该平台基于 TensorFlow 构建,非常灵活,既可以找出最适合 ...

  7. Alex Hanna博士:Google道德AI小组研究员

    Alex Hanna博士是社会学家和研究科学家,致力于Google的机器学习公平性和道德AI. (Dr. Alex Hanna is a sociologist and research scient ...

  8. 用AutoML找到更小、更快、更好的模型,谷歌开源Model Search

    本文转载自机器之心. 作者:Hanna Mazzawi等 编辑:魔王.杜伟 为了帮助研究者自动.高效地开发最佳机器学习模型,谷歌开源了一个不针对特定领域的 AutoML 平台.该平台基于 Tensor ...

  9. 推荐系统组队学习——WideDeep

    文章目录 一.点击率预估简介 二.Wide&Deep原理 三.代码实现 四.深度学习推荐系统以后的发展 一.点击率预估简介 点击率预估是对每次广告点击情况作出预测,可以输出点击或者不点击,也可 ...

最新文章

  1. Oracle Exadata 简介
  2. PHP安全: 一个新型的php一句话cmdshell
  3. Spartan-6的BRAM(Block RAM)模块和DSP 模块XtremeDSP
  4. tinycore Network card configuration during exec bootlocal.sh
  5. yii2 mysql like_Yii2实现跨mysql数据库关联查询排序功能
  6. MFC中静态文本控件显示的几种实现方式
  7. win7系统电脑安全模式解除不了的解决教程
  8. 我是学渣,非计算机专业,当年我如何零基础自学web前端成功的!
  9. 随想录(基于内存映射的进程通信)
  10. OpenCV 图像金字塔buildPyramid、pyrDown、pyrUp
  11. Mac上Go环境配置
  12. String a = new String(“abc“); 到底创建了几个对象
  13. 如何通过OCJP认证考试
  14. 如何玩转私域引流?全链路拆解经典玩法和实战案例
  15. Java 文件操作#常用io流方法解读
  16. centos老是自动更换ip地址解决方案
  17. 嵌入式开发要学多久?要学哪些课程
  18. 2022内蒙古最新建筑施工塔式起重机(建筑特种作业)模拟考试题库及答案
  19. kernel启动流程-head.S的执行_3.preserve_boot_args
  20. 使用Keras构建深度图像搜索引擎

热门文章

  1. 25行代码AC_蓝桥杯 2017A组省赛第九题 分巧克力(暴力优化)
  2. Web前端开发笔记——第三章 CSS语言 第七节 圆角边框、阴影
  3. bose耳机信号断续_最强真无线降噪耳机?BOSE QC Earbuds消噪耳塞上手评测
  4. linux fstream open,fstream创建文件的问题
  5. netty java开发文档_《Netty官方文档》设置开发环境
  6. 计算机网络简易测试仪,测线仪
  7. 总线制和多线制示意图_再谈总线制与多线制的区别
  8. python中元组可以比较大小吗_python元组比较
  9. 新手网站推广邮件群发一点心得
  10. 虚拟机下Ubuntu共享主机文件(Ubuntu、VMware、共享) .