这个图损坏了hhh

记录一次简单模型训练的结果-03

代码:

点击查看代码
# -*- coding: utf-8 -*-
"""
Created on Tue Feb 11 15:23:33 2025
blog: https://www.cnblogs.com/cs1study
@author: cs1study
"""

# 3.数据清洗与预处理
from sklearn.datasets import fetch_california_housing
import pandas as pd

# 加载 California Housing 数据集
housing = fetch_california_housing()
data = pd.DataFrame(housing.data, columns=housing.feature_names)
data['PRICE'] = housing.target

print(data.isnull().sum())

from sklearn.preprocessing import StandardScaler

# 特征标准化
scaler = StandardScaler()
features = data.drop('PRICE', axis=1)
target = data['PRICE']
features_scaled = scaler.fit_transform(features)

# 4.训练一个简单模型

from sklearn.model_selection import train_test_split

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features_scaled, target, test_size=0.2, random_state=42)

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 初始化模型
model = LinearRegression()

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方误差(MSE):{mse}")
print(f"R2 分数:{r2}")

# 5构建一个简单神经网络

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Input

nn_model = Sequential([
    Input(shape=(X_train.shape[1],)),  # 显式定义输入形状
    Dense(64, activation='relu'),
    Dropout(0.5),  # 随机丢弃50%的神经元
    Dense(32, activation='relu'),
    Dense(1)  # 输出层
])



from tensorflow.keras.optimizers import Adam

# 使用较小的学习率
nn_model.compile(optimizer=Adam(learning_rate=0.001), loss='mse', metrics=['mae'])


# 打印模型结构
nn_model.summary()
#训练神经网络
# 开始训练
history = nn_model.fit(
    X_train, y_train,
    epochs=100,  # 训练100轮
    batch_size=32,  # 每次使用32条数据
    validation_split=0.2,  # 20%数据用于验证
    verbose=1  # 显示训练进度
)

# 模型评估
test_loss, test_mae = nn_model.evaluate(X_test, y_test)
print(f"测试集均方误差(MSE):{test_loss}")
print(f"测试集平均绝对误差(MAE):{test_mae}")

# 用测试集数据预测
predictions = nn_model.predict(X_test)

# 显示部分预测结果
for i in range(5):
    print(f"预测值:{predictions[i][0]:.2f}, 实际值:{y_test.iloc[i]:.2f}")

import matplotlib.pyplot as plt

# 绘制训练和验证损失
plt.plot(history.history['loss'], label='Training Loss') # 训练损失
plt.plot(history.history['val_loss'], label='Validation Loss') # 验证损失
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.title('Loss Changes During Training') # 训练过程中的损失变化
plt.show()


结果的截图:
image
image

参考资料:
从零开始:如何用Python训练一个AI模型(超详细教程)非常详细收藏我这一篇就够了!

posted @ 2025-07-09 21:40  cstudy  阅读(19)  评论(0)    收藏  举报