16- TensorFlow实现线性回归和逻辑回归 (TensorFlow系列) (深度学习)

文章介绍了如何使用TensorFlow实现线性回归和逻辑回归。对于线性回归,通过创建线性数据,定义变量、损失函数和优化器,利用梯度下降法进行参数更新。在逻辑回归部分,文章展示了从生成聚类数据到定义sigmoid函数、交叉熵损失函数,以及训练过程。整个过程强调了预测函数、损失函数的选择和优化方法的应用。

知识要点

线性回归要点:

  • 生成线性数据: x = np.linspace(0, 10, 20) + np.random.rand(20)
  • 画点图: plt.scatter(x, y)
  • TensorFlow定义变量: w = tf.Variable(np.random.randn() * 0.02)
  • tensor 转换为 numpy数组: b.numpy()
  • 定义优化器: optimizer = tf.optimizers.SGD()
  • 定义损失:  tf.reduce_mean(tf.square(y_pred - y_true))   # 求均值
  • 自动微分: tf.GradientTape()
  • 计算梯度: gradients = g.gradient(loss, [w, b])
  • 更新w, b: optimizer.apply_gradients(zip(gradients, [w, b]))

逻辑回归要点:

  • 查看安装文件: pip list
  • 聚类数据生成器: make_blobs
  • 生成聚类数据: data, target = make_blobs(centers = 3)
### 使用 TensorFlow 实现线性回归逻辑回归模型 #### 线性回归实现 通过 `tensorflow.keras`,可以构建一个简单的线性回归模型来拟合数据。以下是基于引用的内容总结并扩展的代码示例: ```python import numpy as np import tensorflow as tf from tensorflow import keras import matplotlib.pyplot as plt # 数据生成 num_points = 1000 vectors_set = [] for i in range(num_points): x1 = np.random.normal(0.0, 0.55) y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03) vectors_set.append([x1, y1]) x_data = [v[0] for v in vectors_set] y_data = [v[1] for v in vectors_set] # 显示散点图 plt.scatter(x_data, y_data, c='r') plt.title('Scatter Plot of Data Points') plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.show() # 构建模型 model = keras.Sequential([ keras.layers.Dense(units=1, input_shape=[1]) ]) # 编译模型 model.compile(optimizer=tf.optimizers.SGD(), loss='mean_squared_error') # 训练模型 history = model.fit(np.array(x_data), np.array(y_data), epochs=50) # 预测 predictions = model.predict(np.array(x_data)) # 绘制预测结果 plt.plot(x_data, predictions, 'b', label="Predicted Line") plt.scatter(x_data, y_data, c='r', label="Data Points") plt.legend() plt.show() ``` 上述代码展示了如何利用 `tensorflow.keras` 中的 `Dense` 层创建单层神经网络以完成线性回归任务[^3]。 --- #### 逻辑回归实现 对于逻辑回归问题,可以通过调整损失函数激活函数的方式将其视为二分类问题解决。以下是一个完整的逻辑回归代码示例: ```python import numpy as np import tensorflow as tf from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt # 数据生成 X, Y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2, random_state=1, n_clusters_per_class=1) X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42) # 构建模型 model = tf.keras.models.Sequential([ tf.keras.layers.Input(shape=(2,)), tf.keras.layers.Dense(1, activation='sigmoid') ]) # 编译模型 model.compile(optimizer=tf.optimizers.Adam(), loss='binary_crossentropy', metrics=['accuracy']) # 训练模型 history = model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=50, batch_size=32) # 测试集评估 test_loss, test_accuracy = model.evaluate(X_test, Y_test) print(f'Test Accuracy: {test_accuracy:.4f}') # 可视化训练过程中的损失变化 plt.plot(history.history['loss'], label='Training Loss') plt.plot(history.history['val_loss'], label='Validation Loss') plt.title('Loss Curve') plt.xlabel('Epochs') plt.ylabel('Loss') plt.legend() plt.show() ``` 此代码片段实现逻辑回归的核心功能,并使用了 sigmoid 激活函数以及 binary crossentropy 损失函数[^1]。 --- ### 解释与补充说明 - **线性回归** 是一种监督学习方法,用于建立输入特征与连续目标变量之间的关系。它通常被看作只有一个神经元的一层全连接网络[^2]。 - **逻辑回归** 则是一种分类算法,尽管名字中有“回归”,但它主要用于处理二分类或多分类问题。其核心在于引入非线性的 sigmoid 或 softmax 函数作为输出层的激活函数。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值