• 机器学习---使用 TensorFlow 构建神经网络模型预测波士顿房价和鸢尾花数据集分类


    1. 预测波士顿房价

    1.1 导包
    1. from __future__ import absolute_import
    2. from __future__ import division
    3. from __future__ import print_function
    4. import itertools
    5. import pandas as pd
    6. import tensorflow as tf
    7. tf.logging.set_verbosity(tf.logging.INFO)

    最后一行设置了TensorFlow日志的详细程度:

    tf.logging.DEBUG:最详细的日志级别,用于记录调试信息。

    tf.logging.INFO:用于记录一般的信息性消息,比如训练过程中的指标和进度。

    tf.logging.WARN:用于记录警告消息,表示可能存在潜在问题,但不会导致程序终止。

    tf.logging.ERROR:仅记录错误消息,表示程序遇到了错误并可能终止执行。

    tf.logging.FATAL:记录严重错误消息,并终止程序的执行。

    1.2 处理数据集
    1. COLUMNS = ["crim", "zn", "indus", "nox", "rm", "age",
    2. "dis", "tax", "ptratio", "medv"]
    3. FEATURES = ["crim", "zn", "indus", "nox", "rm",
    4. "age", "dis", "tax", "ptratio"]
    5. LABEL = "medv"
    6. training_set = pd.read_csv("boston_train.csv", skipinitialspace=True,
    7. skiprows=1, names=COLUMNS)
    8. test_set = pd.read_csv("boston_test.csv", skipinitialspace=True,
    9. skiprows=1, names=COLUMNS)
    10. prediction_set = pd.read_csv("boston_predict.csv", skipinitialspace=True,
    11. skiprows=1, names=COLUMNS)

    定义了一些列名和特征,并使用pd.read_csv函数读取了训练集、测试集和预测集的数据。

    pd.read_csv函数来读取CSV文件,并将其转换为Pandas数据帧。

    1.3  创建DNNRegressor对象
    1. feature_cols = [tf.feature_column.numeric_column(k) for k in FEATURES]
    2. regressor = tf.estimator.DNNRegressor(feature_columns=feature_cols,
    3. hidden_units=[50,50,50],
    4. model_dir="./boston_model")

    tf.feature_column.numeric_column函数用于创建一个表示数值特征的特征列。在这种情况下,它

    会遍历FEATURES列表中的每个特征名称,并为每个特征创建一个数值特征列。

    创建DNNRegressor对象的参数:

      feature_columns:这是包含特征列的列表,用于定义输入的特征。在这里,您传递了之前创建

    feature_cols,它包含了用于模型训练的数值特征列。

      hidden_units:这是一个整数列表,用于定义隐藏层的结构。在这个例子中,您定义了一个具

    有3个隐藏层的DNN模型,每个隐藏层都有50个神经元。

    model_dir:这是模型保存的目录路径。在这里,您指定了"./boston_model"作为模型保存的目录。

    1.4 创建输入函数
    1. def get_input_fn(data_set, num_epochs=None, shuffle=True):
    2. return tf.estimator.inputs.pandas_input_fn(
    3. x=pd.DataFrame({k: data_set[k].values for k in FEATURES}),
    4. y = pd.Series(data_set[LABEL].values),
    5. num_epochs=num_epochs,
    6. shuffle=shuffle)

    该输入函数将Pandas数据帧作为输入,并将其转换为TensorFlow的输入格式。具体而言,它将特

    征数据集(由FEATURES列表指定的列)转换为x,将标签数据(由LABEL指定的列)转换为y

    1.5 训练评估预测
    1. regressor.train(input_fn=get_input_fn(training_set), steps=5000)
    2. ev = regressor.evaluate(
    3. input_fn=get_input_fn(test_set, num_epochs=1, shuffle=False))
    4. loss_score = ev["loss"]
    5. print("Loss: {0:f}".format(loss_score))
    6. y = regressor.predict(
    7. input_fn=get_input_fn(prediction_set, num_epochs=1, shuffle=False))
    8. # .predict() returns an iterator of dicts; convert to a list and print
    9. # predictions
    10. predictions = list(p["predictions"] for p in itertools.islice(y, 6))
    11. print("Predictions: {}".format(str(predictions)))

    steps参数指定了训练的迭代步数,即模型将对训练数据执行多少次梯度下降更新。

    使用get_input_fn获取输入函数,该函数将测试集(test_set)作为输入数据。num_epochs参数设

    置为1,表示测试集只会被迭代一次,shuffle参数被设置为False,表示测试集不需要进行洗牌。

    然后提取评估结果中的损失值(loss),并将其赋值给loss_score变量。

    通过迭代预测结果的字典形式,将预测值提取出来,并将其存储在predictions列表中。

    2. 鸢尾花数据集分类

    1. import tensorflow as tf
    2. import pandas as pd
    3. COLUMN_NAMES = [
    4. 'SepalLength',
    5. 'SepalWidth',
    6. 'PetalLength',
    7. 'PetalWidth',
    8. 'Species'
    9. ]
    10. # Import training dataset
    11. training_dataset = pd.read_csv('iris_training.csv', names=COLUMN_NAMES, header=0)
    12. train_x = training_dataset.iloc[:, 0:4]
    13. train_y = training_dataset.iloc[:, 4]
    14. # Import testing dataset
    15. test_dataset = pd.read_csv('iris_test.csv', names=COLUMN_NAMES, header=0)
    16. test_x = test_dataset.iloc[:, 0:4]
    17. test_y = test_dataset.iloc[:, 4]
    18. # Setup feature columns
    19. columns_feat = [
    20. tf.feature_column.numeric_column(key='SepalLength'),
    21. tf.feature_column.numeric_column(key='SepalWidth'),
    22. tf.feature_column.numeric_column(key='PetalLength'),
    23. tf.feature_column.numeric_column(key='PetalWidth')
    24. ]
    25. # Build Neural Network - Classifier
    26. classifier = tf.estimator.DNNClassifier(
    27. feature_columns=columns_feat,
    28. # Two hidden layers of 10 nodes each.
    29. hidden_units=[10, 10],
    30. # The model is classifying 3 classes
    31. n_classes=3)
    32. # Define train function
    33. def train_function(inputs, outputs, batch_size):
    34. dataset = tf.data.Dataset.from_tensor_slices((dict(inputs), outputs))
    35. dataset = dataset.shuffle(1000).repeat().batch(batch_size)
    36. return dataset.make_one_shot_iterator().get_next()
    37. # Train the Model.
    38. classifier.train(
    39. input_fn=lambda:train_function(train_x, train_y, 100),
    40. steps=1000)
    41. # Define evaluation function
    42. def evaluation_function(attributes, classes, batch_size):
    43. attributes=dict(attributes)
    44. if classes is None:
    45. inputs = attributes
    46. else:
    47. inputs = (attributes, classes)
    48. dataset = tf.data.Dataset.from_tensor_slices(inputs)
    49. assert batch_size is not None, "batch_size must not be None"
    50. dataset = dataset.batch(batch_size)
    51. return dataset.make_one_shot_iterator().get_next()
    52. # Evaluate the model.
    53. eval_result = classifier.evaluate(
    54. input_fn=lambda:evaluation_function(test_x, test_y, 100))
    55. print('\nAccuracy: {accuracy:0.3f}\n'.format(**eval_result))

    首先导入所需的库,包括 TensorFlow 和 Pandas。然后,定义了一个包含特征列的列

    表 columns_feat,用于描述输入数据的特征。接下来,通过 Pandas 读取训练集和测试集的数

    据,并将其分为输入特征和输出类别。

    然后,使用 tf.estimator.DNNClassifier 类构建了一个多层感知机神经网络分类器。该分类器具

    有两个隐藏层,每个隐藏层包含10个节点,输出层用于分类3个类别的鸢尾花。

    然后,定义了一个训练函数 train_function 和一个评估函数 evaluation_function,用于转换输

    入数据并创建 TensorFlow 数据集。训练函数将训练数据转换为 Dataset 对象,并进行随机化、重

    复和分批处理。评估函数将测试数据转换为 Dataset 对象,并进行分批处理。

    最后,通过调用 classifier.train 方法来训练模型,使用训练函数作为输入函数,并指定训练步

    数。然后,通过调用 classifier.evaluate 方法来评估模型的性能,使用评估函数作为输入函数,

    并指定评估时的批大小。评估结果包括准确率,并通过 print 函数进行输出。

     

     

  • 相关阅读:
    安装2023最新版PyCharm来开发Python应用程序
    cassandra权威指南
    递归:快速排序,归并排序和堆排序
    Backblaze 2023全年硬盘故障质量报告解读
    flutter 系列之:flutter 中的幽灵offstage
    艾美捷T7 RNA聚合酶化学性质&文献参考
    transformer大语言模型(LLM)部署方案整理
    工作中Java Stream的简单应用
    TypeScript进阶知识之接口(接口定义、接口属性、可索引类型、接口表示函数类型、额外的属性检查、接口继承、接口与类型别名的区别)
    Macroscope安全漏洞检测工具简介
  • 原文地址:https://blog.csdn.net/weixin_43961909/article/details/134088359