tensorflow线性模型以及Wide deep learning

本文介绍了TensorFlow中的线性模型,包括tf.contrib.learn.LinearClassifier和LinearRegressor,强调了线性模型的训练速度和可解释性优势。接着讨论了Wide & Deep Learning的概念,旨在结合memorization和generalization。通过一个预测收入是否超过50000元的例子,展示了如何使用线性模型,并给出了数据描述和代码实现。最后提到了在不同模型类型(wide, deep, wide_n_deep)下的运行结果和防止线性模型过拟合的方法。" 79169924,7459704,前端页面重构最佳实践,"['前端开发', '代码规范', 'CSS重构']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请支持我的博客http://shuaizhang.tech/
原文地址

什么是线性模型

相信大多数人,刚开始接触机器学习的时候,就会接触到线性模型。来看一个简单的例子:通过人的年龄、受教育年数、工作年限等信息,可以预测出一个人的基本收入水平,预测方法就是对前面的限定特征赋予不同的权值,最后计算出工资;此外,线性模型也可以用于分类,例如逻辑回归就是一种典型的线性分类器。

相对于其他的复杂模型来说,线性模型主要有以下几个优点:

  • 训练速度快
  • 大量特征集的时候工作的很好
  • 方便解释和debug,参数调节比较方便

tf.learn关于线性模型的一些API

  • FeatureColumn
  • sparse_column 用于解决类别特征的稀疏问题,对于类别型的特征,一般使用的One hot方法,会导致矩阵稀疏的问题。
eye_color = tf.contrib.layers.sparse_column_with_keys(
  column_name="eye_color", keys=["blue", "brown", "green"])
  education = tf.contrib.layers.sparse_column_with_hash_bucket(\
    "education", hash_bucket_size=1000)#不知道所有的可能值的时候用这个接口
  • Feature Crosses 可以用来合并不同的特征
sport = tf.contrib.layers.sparse_column_with_hash_bucket(\
    "sport", hash_bucket_size=1000)
city = tf.contrib.layers.sparse_column_with_hash_bucket(\
    "city", hash_bucket_size=1000)
sport_x_city = tf.contrib.layers.crossed_column(
    [sport, city], hash_bucket_size=int(1e4))
  • Continuous columns 用于连续的变量特征
    age = tf.contrib.layers.real_valued_column(“age”)
  • Bucketization 将连续的变量变成类别标签
    age_buckets = tf.contrib.layers.bucketized_column(age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])

tf.contrib.learn.LinearClassifier和LinearRegressor

这两个一个用于分类,一个用于回归,使用步骤如下

  • 创建对象实例,在构造函数中传入featureColumns
  • 用fit训练模型
  • 用evaluate评估

下面是一段示例代码:

e = tf.contrib.learn.LinearClassifier(feature_columns=[
  native_country, education, occupation, workclass, marital_status,
  race, age_buckets, education_x_occupation, age_buckets_x_race_x_occupation],
  model_dir=YOUR_MODEL_DIRECTORY)
e.fit(input_fn=input_fn_train, steps=200)

# Evaluate for one step (one pass through the test data).
results = e.evaluate(input_fn=input_fn_test, steps=1)


# Print the stats for the evaluation.
for key in sorted(results):
    print "%s: %s" % (key, results[key])

Wide and deep learning

最近刚看了这篇论文,打算专门写一章来详细讲解,这个训练模型的出现是为了结合memorization和generalization。下面推荐几篇文章:

### 关于 Wide & Deep Learning for Recommender Systems 的出处 Wide & Deep 学习框架首次被提出是在由 Google 发表的一篇重要论文中,这篇论文名为《Wide & Deep Learning for Recommender Systems》[^1]。此论文主要探讨了一种新的机器学习架构——宽深网络(Wide & Deep Network),其目的是为了在推荐系统中更好地平衡记忆化(Memorization)和泛化能力(Generalization)。这种架构通过联合训练广度模型Wide Model)和深度神经网络模型Deep Neural Network, DNN Model),从而实现了短期收益最大化的同时兼顾长期探索的可能性。 具体而言,Wide 部分负责处理高频特征及其组合的记忆功能,而 Deep 部分则专注于捕捉低频甚至未见过的特征组合,以此增强系统的泛化性能[^4]。这一设计使得该模型特别适合应用于数据稀疏性较高的场景下,例如个性化推荐服务等领域。 因此,《Wide & Deep Learning for Recommender Systems》可以被认为是原始文献的主要来源之一,并且已经被广泛认可为推荐算法研究领域内的经典之作。 ```python # 示例代码片段用于说明如何实现基本的 Wide&Deep 架构 import tensorflow as tf def build_wide_deep_model(wide_columns, deep_columns): feature_columns = wide_columns + deep_columns # 定义输入层 inputs = { col.name: tf.keras.layers.Input(name=col.name, shape=(1,), dtype=tf.float32) for col in feature_columns } # 广度部分 (线性模型) wide = tf.feature_column.input_layer(inputs, wide_columns) # 深度部分 (DNN 模型) deep = tf.feature_column.input_layer(inputs, deep_columns) for units in [128, 64]: deep = tf.keras.layers.Dense(units)(deep) deep = tf.keras.layers.BatchNormalization()(deep) deep = tf.keras.layers.ReLU()(deep) # 合并两部分输出 combined_output = tf.keras.layers.concatenate([wide, deep]) output = tf.keras.layers.Dense(1, activation='sigmoid')(combined_output) model = tf.keras.Model(inputs, output) return model ``` #### 参考上述内容总结得出结论: 综上所述,《Wide & Deep Learning for Recommender Systems》一文出自谷歌团队的研究成果,它是当前许多实际生产环境中所采用的技术基础理论依据。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值