### 使用 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 函数作为输出层的激活函数。
---