Wide&Deep


Wide&Deep模型是谷歌在2016年提出的一种用于分类、回归任务的模型

Memorization:
LR模型+大量的原始特征和叉乘特征作为输入,“记忆”历史数据中曾共同出现过的特征对。

Generalization:
为sparse特征学习低维的dense embeddings来捕获特征相关性,学习到的embeddings本身带有一定的语义信息
a(l+1)=f(W(l)a(l)+b(l))a^{(l+1)} = f(W^{(l)}a^{(l)} + b^{(l)})a(l+1)=f(W(l)a(l)+b(l))
优点:减少人工参与,并且可以对历史上没有出现的特征组合有更好的泛化能力
缺点:对于一些小众的商品,很难学到有效的embedding,会导致泛化过度

from __future__ import absolute_import
from __future__ import division
from __future__ import print_functionimport argparse
import sys
import tempfileimport pandas as pd
from six.moves import urllib
import tensorflow as tfCSV_COLUMNS = ["age", "workclass", "fnlwgt", "education", "education_num","marital_status", "occupation", "relationship", "race", "gender","capital_gain", "capital_loss", "hours_per_week", "native_country","income_bracket"
]gender = tf.feature_column.categorical_column_with_vocabulary_list("gender", ["Female", "Male"])
education = tf.feature_column.categorical_column_with_vocabulary_list("education", ["Bachelors", "HS-grad", "11th", "Masters", "9th","Some-college", "Assoc-acdm", "Assoc-voc", "7th-8th","Doctorate", "Prof-school", "5th-6th", "10th", "1st-4th","Preschool", "12th"])
marital_status = tf.feature_column.categorical_column_with_vocabulary_list("marital_status", ["Married-civ-spouse", "Divorced", "Married-spouse-absent","Never-married", "Separated", "Married-AF-spouse", "Widowed"])
relationship = tf.feature_column.categorical_column_with_vocabulary_list("relationship", ["Husband", "Not-in-family", "Wife", "Own-child", "Unmarried","Other-relative"])
workclass = tf.feature_column.categorical_column_with_vocabulary_list("workclass", ["Self-emp-not-inc", "Private", "State-gov", "Federal-gov","Local-gov", "?", "Self-emp-inc", "Without-pay", "Never-worked"])# To show an example of hashing:
occupation = tf.feature_column.categorical_column_with_hash_bucket("occupation", hash_bucket_size=1000)
native_country = tf.feature_column.categorical_column_with_hash_bucket("native_country", hash_bucket_size=1000)# Continuous base columns.
age = tf.feature_column.numeric_column("age")
education_num = tf.feature_column.numeric_column("education_num")
capital_gain = tf.feature_column.numeric_column("capital_gain")
capital_loss = tf.feature_column.numeric_column("capital_loss")
hours_per_week = tf.feature_column.numeric_column("hours_per_week")# Transformations.
age_buckets = tf.feature_column.bucketized_column(age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])# Wide columns and deep columns.
base_columns = [gender, education, marital_status, relationship, workclass, occupation,native_country, age_buckets,
]crossed_columns = [tf.feature_column.crossed_column(["education", "occupation"], hash_bucket_size=1000),tf.feature_column.crossed_column([age_buckets, "education", "occupation"], hash_bucket_size=1000),tf.feature_column.crossed_column(["native_country", "occupation"], hash_bucket_size=1000)
]deep_columns = [tf.feature_column.indicator_column(workclass),tf.feature_column.indicator_column(education),tf.feature_column.indicator_column(gender),tf.feature_column.indicator_column(relationship),# To show an example of embeddingtf.feature_column.embedding_column(native_country, dimension=8),tf.feature_column.embedding_column(occupation, dimension=8),age,education_num,capital_gain,capital_loss,hours_per_week,
]def maybe_download(train_data, test_data):"""Maybe downloads training data and returns train and test file names."""if train_data:train_file_name = train_dataelse:train_file = tempfile.NamedTemporaryFile(delete=False)urllib.request.urlretrieve("https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data",train_file.name)  # pylint: disable=line-too-longtrain_file_name = train_file.nametrain_file.close()print("Training data is downloaded to %s" % train_file_name)if test_data:test_file_name = test_dataelse:test_file = tempfile.NamedTemporaryFile(delete=False)urllib.request.urlretrieve("https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test",test_file.name)  # pylint: disable=line-too-longtest_file_name = test_file.nametest_file.close()print("Test data is downloaded to %s"% test_file_name)return train_file_name, test_file_namedef build_estimator(model_dir, model_type):"""Build an estimator."""if model_type == "wide":m = tf.estimator.LinearClassifier(model_dir=model_dir, feature_columns=base_columns + crossed_columns)elif model_type == "deep":m = tf.estimator.DNNClassifier(model_dir=model_dir,feature_columns=deep_columns,hidden_units=[100, 50])else:m = tf.estimator.DNNLinearCombinedClassifier(model_dir=model_dir,linear_feature_columns=crossed_columns,dnn_feature_columns=deep_columns,dnn_hidden_units=[100, 50])return mdef input_fn(data_file, num_epochs, shuffle):"""Input builder function."""df_data = pd.read_csv(tf.gfile.Open(data_file),names=CSV_COLUMNS,skipinitialspace=True,engine="python",skiprows=1)# remove NaN elementsdf_data = df_data.dropna(how="any", axis=0)labels = df_data["income_bracket"].apply(lambda x: ">50K" in x).astype(int)return tf.estimator.inputs.pandas_input_fn(x=df_data,y=labels,batch_size=100,num_epochs=num_epochs,shuffle=shuffle,num_threads=5)def train_and_eval(model_dir, model_type, train_steps, train_data, test_data):"""Train and evaluate the model."""train_file_name, test_file_name = maybe_download(train_data, test_data)model_dir = tempfile.mkdtemp() if not model_dir else model_dirm = build_estimator(model_dir, model_type)# set num_epochs to None to get infinite stream of data.m.train(input_fn=input_fn(train_file_name, num_epochs=None, shuffle=True),steps=train_steps)# set steps to None to run evaluation until all data consumed.results = m.evaluate(input_fn=input_fn(test_file_name, num_epochs=1, shuffle=False),steps=None)print("model directory = %s" % model_dir)for key in sorted(results):print("%s: %s" % (key, results[key]))FLAGS = Nonedef main(_):train_and_eval(FLAGS.model_dir, FLAGS.model_type, FLAGS.train_steps,FLAGS.train_data, FLAGS.test_data)if __name__ == "__main__":parser = argparse.ArgumentParser()parser.register("type", "bool", lambda v: v.lower() == "true")parser.add_argument("--model_dir",type=str,default="",help="Base directory for output models.")parser.add_argument("--model_type",type=str,default="wide_n_deep",help="Valid model types: {'wide', 'deep', 'wide_n_deep'}.")parser.add_argument("--train_steps",type=int,default=2000,help="Number of training steps.")parser.add_argument("--train_data",type=str,default="",help="Path to the training data.")parser.add_argument("--test_data",type=str,default="",help="Path to the test data.")FLAGS, unparsed = parser.parse_known_args()tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)

机器学习项目(五) 电影推荐系统(七)WideDeep相关推荐

  1. 机器学习项目-音乐系统推荐系统-音乐分类-Pydub-python_speech_featrures MFCC-SVM

    文章目录 1.项目说明 2.代码 2.1 代码结构 2.2 feature 2.3 svm 2.4 acc 2.5 class_demo 2.6 features_main 2.7 svm_main ...

  2. 基于Python机器学习算法的电影推荐系统以及票房预测系统

    电影数据分析 目录 电影数据分析 1 一..实验概述 1 1.1 实验标 1 1.2 .实验完成情况 1 二..电影特征的可视化分析 2 电影票房预测 9 2.1 Data Augmentation ...

  3. java项目-第96期基于ssm+hadoop+spark的电影推荐系统-大数据毕业设计

    java项目-第96期基于ssm+hadoop+spark的电影推荐系统 [源码请到资源专栏下载] 1.项目简述 电影推荐系统,基于大数据分析的推荐系统,适合学习和企业应用. 首先电影推荐相对于其它推 ...

  4. 基础环境搭建——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(五)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  5. 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  6. Python机器学习实战教学——基于协同过滤的电影推荐系统(超详细教学,算法分析)

    注重版权,转载请注明原作者和原文链接 作者:Yuan-Programmer 结尾处有效果展示 文章目录 引言 一.技术原理 (一)推荐算法介绍 (二)主流距离计算法 (三)余弦距离计算法 二.数据介绍 ...

  7. 项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  8. Django基于用户画像的电影推荐系统源码(项目源代码)

    一.项目介绍 公众号:yk 坤帝 获取全部源代码 本系统是以Django作为基础框架,采用MTV模式,数据库使用MongoDB.MySQL和Redis,以从豆瓣平台爬取的电影数据作为基础数据源,主要基 ...

  9. 使用Java语言开发在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户、物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis)开发框架 机器学习、人工智能、大数据开发

    使用Java语言开发在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户.物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis)开发框架 机器学习.人工智能.大数据开发 ...

  10. 使用Java+SSM框架+JSP开发简单在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户、物品的协同过滤推荐算法 大数据 机器学习 SimpleMovieRecommendOnline

    使用Java+SSM框架+JSP开发简单在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户.物品的协同过滤推荐算法 大数据 机器学习 SimpleMovieRecommendOnline 一.项目简 ...

最新文章

  1. eclipse或者myeclipse的代码提示功能
  2. iOS 图片处理-图片旋转和裁剪
  3. jsp+Servlet+JavaBean+JDBC+MySQL项目增删改查
  4. 按需生产 ,我们准备好了吗?
  5. 读取工作流程中的表单物件
  6. java 状态机_基于 RAFT 一致性算法的 Java 实现 SOFAJRaft
  7. [转载] 用 C++ 和 Java 写算法,差别大吗?
  8. NullPointerException空指针异常的理解
  9. mysql数据库教程官网_数据库MySQL官方推荐教程-MySQL入门到删库
  10. jquery1.7版本核心模块测试封装
  11. .net core3.1 abp学习开始(一)
  12. 程序员薪水变化数据大曝光,哭着上班,笑着拿工资!
  13. 自定义水晶报表的外观
  14. 【题解】纪中篮球联赛
  15. 大数据时代的背景与变化
  16. 【每日新闻】苹果公布新实验室:机器人每年回收120万部iPhone
  17. 阿里云服务器+腾讯域名进行域名解析
  18. matlab 对数坐标
  19. 用液晶显示器和纯平显示器浏览Blog
  20. 关于RC电路耦合、相移、滤波、微分、积分的那些事儿~

热门文章

  1. listener之一二
  2. bzoj-1128 Lam
  3. JS自制简易版数字华容道小游戏
  4. 排序在实际生活中的应用
  5. 爬虫系列-雪球网选股策略爬取程序1.0
  6. 反向延长线段什么意思_“延长”和“延伸”有什么区别?
  7. 正则表达式判断-不为空 长度大于6 不能包含数字
  8. Flink从入门到精通系列(四)
  9. CCF-CSP题解 201912-3化学方程式【字符串处理+模拟】
  10. x的四次方+1因式分解