【122】TensorFlow检查地图数据

本文通过绘制训练集和验证集的热点图,发现并解决数据集存在的问题,并提供了一种处理数据集中异常值的方法。

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

在对数据集进行训练之前,需要先验证数据集。本文以美国加利福尼亚州房价相关数据,作为演示。训练集和验证集用到的CSV文件在这里:https://download.youkuaiyun.com/download/zhangchao19890805/10584496

下图是加利福尼亚州的地图:
1.png

为了验证数据集是否存在缺陷,我们要读取训练集和验证集,观察这些数据的规律。并且按照经纬度绘制热点图,观察地图数据是否准确。

下面的代码完成了上面的工作:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 从CSV文件中读取数据,返回DataFrame类型的数据集合。
def zc_func_read_csv():
    zc_var_dataframe = pd.read_csv("http://49.4.2.82/california_housing_train.csv", sep=",")
    return zc_var_dataframe

# 预处理特征值
def preprocess_features(california_housing_dataframe):
    selected_features = california_housing_dataframe[
        ["latitude",
         "longitude",
         "housing_median_age",
         "total_rooms",
         "total_bedrooms",
         "population",
         "households",
         "median_income"]
    ]
    processed_features = selected_features.copy()
    # 增加一个新属性:人均房屋数量。
    processed_features["rooms_per_person"] = (
        california_housing_dataframe["total_rooms"] /
        california_housing_dataframe["population"])
    return processed_features

# 预处理标签
def preprocess_targets(california_housing_dataframe):
    output_targets = pd.DataFrame()
    # Scale the target to be in units of thousands of dollars.
    output_targets["median_house_value"] = (
        california_housing_dataframe["median_house_value"] / 1000.0)
    return output_targets

# 画热度图
def draw_heat_map(pa_ax, pa_title, pa_x_arr, pa_y_arr, pa_c):
    # 设置图表标题
    pa_ax.set_title(pa_title)
    # 设置y轴自动缩放
    pa_ax.set_autoscaley_on(False)
    # 设置y轴数值限制
    pa_ax.set_ylim([32, 43])
    # 设置x轴自动缩放
    pa_ax.set_autoscalex_on(False)
    # 设置x轴数值限制
    pa_ax.set_xlim([-126, -112])
    pa_ax.scatter(pa_x_arr, pa_y_arr,
                cmap="coolwarm",
                c=pa_c)

def zc_func_main():
    california_housing_dataframe = zc_func_read_csv()
    # 对于训练集,我们从共 17000 个样本中选择前 12000 个样本。
    training_examples = preprocess_features(california_housing_dataframe.head(12000))
    print(training_examples.describe())
    training_targets = preprocess_targets(california_housing_dataframe.head(12000))
    print(training_targets.describe())
    # 对于验证集,我们从共 17000 个样本中选择后 5000 个样本。
    validation_examples = preprocess_features(california_housing_dataframe.tail(5000))
    print(validation_examples.describe())
    validation_targets = preprocess_targets(california_housing_dataframe.tail(5000))
    print(validation_targets.describe())

    fig = plt.figure()
    fig.set_size_inches(14,7)
    # 绘制验证集的热点图
    var_c = validation_targets["median_house_value"] / validation_targets["median_house_value"].max()
    draw_heat_map(fig.add_subplot(1, 2, 1), "Validation Data", validation_examples["longitude"],
                 validation_examples["latitude"], var_c)
    # 绘制训练集的热点图
    var_c_train = training_targets["median_house_value"] / training_targets["median_house_value"].max()
    draw_heat_map(fig.add_subplot(1, 2, 2), "Training Data", training_examples["longitude"],
                 training_examples["latitude"], var_c_train)

    plt.show()

zc_func_main()

结果如下:

           latitude     longitude  housing_median_age   total_rooms  total_bedrooms    population   households  median_income  rooms_per_person  
count  12000.000000  12000.000000        12000.000000  12000.000000    12000.000000  12000.000000  12000.00000   12000.000000      12000.000000  
mean      34.614578   -118.470274           27.468333   2655.682333      547.057167   1476.007000    505.38425       3.795047          1.940185  
std        1.625970      1.243589           12.061790   2258.147574      434.314754   1174.280904    391.71534       1.851925          1.327142  
min       32.540000   -121.390000            1.000000      2.000000        2.000000      3.000000      2.00000       0.499900          0.018065 
25%       33.820000   -118.940000           17.000000   1451.750000      299.000000    815.000000    283.00000       2.517200          1.420007  
50%       34.050000   -118.210000           28.000000   2113.500000      438.000000   1207.000000    411.00000       3.462250          1.880875  
75%       34.440000   -117.790000           36.000000   3146.000000      653.000000   1777.000000    606.00000       4.644625          2.258830  
max       41.820000   -114.310000           52.000000  37937.000000     5471.000000  35682.000000   5189.00000      15.000100         55.222222  


       median_house_value
count        12000.000000
mean           198.037593
std            111.857499
min             14.999000
25%            117.100000
50%            170.500000
75%            244.400000
max            500.001000


          latitude    longitude  housing_median_age   total_rooms  total_bedrooms   population   households  median_income  rooms_per_person  
count  5000.000000  5000.000000          5000.00000   5000.000000     5000.000000   5000.00000  5000.000000    5000.000000       5000.000000  
mean     38.050778  -122.182510            31.27980   2614.821400      521.059600   1318.13460   491.232400       4.096053          2.078781  
std       0.923030     0.480337            13.38939   1979.620397      388.452096   1073.74575   366.523912       2.021218          0.638113  
min      36.140000  -124.350000             1.00000      8.000000        1.000000      8.00000     1.000000       0.499900          0.135721  
25%      37.490000  -122.400000            20.00000   1481.000000      292.000000    731.00000   278.000000       2.690900          1.749190  
50%      37.790000  -122.140000            31.00000   2164.000000      424.000000   1074.00000   403.000000       3.728450          2.066278  
75%      38.370000  -121.910000            42.00000   3161.250000      635.000000   1590.25000   603.000000       5.064100          2.375372  
max      41.950000  -121.390000            52.00000  32627.000000     6445.000000  28566.00000  6082.000000      15.000100         18.255319  


       median_house_value
count         5000.000000
mean           229.532879
std            122.520063
min             14.999000
25%            130.400000
50%            213.000000
75%            303.150000
max            500.001000

2.png

我们可以观察到,训练集的热点图有点类似加利福尼亚州的地图,而验证集的则完全不像。这表明我们的数据可能出了问题,没有均匀覆盖整个州。

我们用CSV文件中的前12000个样本做训练集,后5000个样本做验证集。如果CSV中的数据按照某种顺序排列,确实可能造成这样的问题,所以我们在读取了CSV文件后,需要打乱原来的顺序。改造函数 zc_func_read_csv ,变成如下的样子:


# 从CSV文件中读取数据,返回DataFrame类型的数据集合。
def zc_func_read_csv():
    zc_var_dataframe = pd.read_csv("http://49.4.2.82/california_housing_train.csv", sep=",")
    # 打乱数据集合的顺序。有时候数据文件有可能是根据某种顺序排列的,会影响到我们对数据的处理。
    zc_var_dataframe = zc_var_dataframe.reindex(np.random.permutation(zc_var_dataframe.index))
    return zc_var_dataframe

热点图的结果就正常了:

3.png

根据输出的列表,可以检查一下其它数据:

对于一些值(例如 median_house_value),我们可以检查这些值是否位于合理的范围内(请注意,这是 1990 年的数据,不是现在的!)。

如果您仔细看,可能会发现下列异常情况:

median_income 位于 3 到 15 的范围内。我们完全不清楚此范围究竟指的是什么,看起来可能是某对数尺度?无法找到相关记录;我们所能假设的只是,值越高,相应的收入越高。

median_house_value 的最大值是 500001。这看起来像是某种人为设定的上限。

rooms_per_person 特征通常在正常范围内,其中第 75 百分位数的值约为 2。但也有一些非常大的值(例如 18 或 55),这可能表明数据有一定程度的损坏。

我们将暂时使用提供的这些特征。但希望这些示例可帮助您较为直观地了解如何检查来自未知来源的数据。

<think>好的,用户现在问为什么需要TensorFlow。我需要先回顾之前的对话,确保回答连贯。之前用户询问了一段配置GPU的代码,我用快递站的类比解释了各个部分的作用。现在用户可能想了解TensorFlow本身的价值,而不仅仅是代码片段。 首先,用户可能刚接触深度学习或TensorFlow,需要了解其基本优势。他们可能想知道为什么选择TensorFlow而不是其他框架,比如PyTorch。考虑到用户之前使用了Keras,所以需要提到TensorFlow与Keras的集成。 用户可能是在学习或项目中需要选择工具,所以需要强调TensorFlow的实际应用场景,比如工业部署、跨平台支持等。此外,用户可能关心易用性、社区支持和生态系统,这些对于新手来说很重要。 需要避免过于技术化的术语,保持之前的类比风格。比如用快递站的例子说明TensorFlow如何像自动化分拣系统一样高效处理数据。同时,要覆盖主要优势:高效计算、可扩展性、生态系统、部署能力等。 还要检查是否需要对比其他框架,但用户没有明确问,所以可能不需要深入,但可以稍微提到社区支持广泛。另外,用户可能对TensorFlow 2.x的改进感兴趣,比如eager execution和Keras的整合,让开发更简单。 最后,确保结构清晰,分点解释,结合之前的比喻,帮助用户形成系统化的理解。可能还要回答用户潜在的问题,比如TensorFlow在研究和生产中的不同优势,以及为什么它适合大型项目。</think>用快递站智能升级的视角理解TensorFlow的必要性: 📦 **核心价值类比** TensorFlow就像为现代快递中心设计的智能中枢系统,解决了传统作业的三大痛点: 1️⃣ **人工分拣效率低** ➡️ 自动构建计算流水线(自动微分/并行计算) 2️⃣ **包裹类型单一** ➡️ 支持图像/文本/语音多模态数据处理 3️⃣ **高峰期系统崩溃** ➡️ 分布式计算支持横向扩展 🔧 **六大技术优势详解** 1. **智能调度引擎** - 自动微分系统:像自动规划最优分拣路径,只需定义目标(损失函数),自动计算参数更新路线 ```python # 传统方法:手动计算梯度 ≈ 人工规划路线 # TensorFlow自动微分: with tf.GradientTape() as tape: prediction = model(x) loss = loss_fn(y, prediction) gradients = tape.gradient(loss, model.trainable_variables) ``` 2. **异构计算货架** - CPU/GPU/TPU统一接口:类似标准化包裹集装箱,适配不同运输工具(计算设备) - 混合精度支持:像同时使用传送带(FP16)和叉车(FP32)协同作业 3. **弹性扩展仓库** - 分布式策略:支持多分拣中心协同工作(多机多卡并行) ```python strategy = tf.distribute.MirroredStrategy() with strategy.scope(): # 包裹自动拆分到多个流水线 model = create_model() ``` 4. **预制流水线模板** - Keras API:提供标准分拣流程(Dense/CNN/RNN层) - 预训练模型库:现成的智能分拣方案(ResNet/BERT等) 5. **全渠道部署系统** - TensorFlow Serving:支持快递柜(本地服务器)/无人机(移动端)/跨境运输(浏览器)多端部署 ```bash # 模型打包成标准集装箱 tf.saved_model.save(model, "delivery_system") # 一键部署服务 docker run -p 8501:8501 tensorflow/serving --model_name=delivery_system ``` 6. **实时监控大屏** - TensorBoard:可视化分拣效率(训练曲线)、包裹流向(激活分布)、设备状态(计算图) 🆚 **竞品对比(快递系统选型)** - **PyTorch**:适合研发新分拣算法(动态图调试方便) - **TensorFlow**:适合建立标准化分拣中心(静态图优化+生产部署成熟) 🌍 **行业应用地图** ```mermaid graph LR A[TensorFlow中枢] --> B[智能分拣:图像分类] A --> C[运单识别:NLP] A --> D[路线优化:强化学习] A --> E[需求预测:时序分析] ``` 💡 **学习路线建议** 1️⃣ 先掌握基础分拣技能(Keras高层API) 2️⃣ 理解智能调度原理(计算图/会话机制) 3️⃣ 研究特殊包裹处理(自定义层/损失函数) 4️⃣ 搭建自动化分拣中心(TFX全流程部署) 就像现代物流离不开智能中枢系统,TensorFlow为AI应用提供了从研发到落地的完整基础设施,特别适合需要稳定性和可扩展性的工业级应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值