鱼C论坛

 找回密码
 立即注册
查看: 636|回复: 0

代码有什么问题吗

[复制链接]
发表于 2024-6-14 17:31:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用sklearn的函数对Diabetes数据集进行加载,并按照自己设定的比例将数据集进行训练集与测试集的划分。线性回归算法对训练集进行训练,并基于测试集进行评估。
  1. # 读取相关数据包
  2. from sklearn import datasets
  3. from sklearn.model_selection import train_test_split
  4. import numpy as np
  5. from sklearn.metrics import r2_score
  6. import matplotlib.pyplot as plt

  7. def visualize_feature(X, Y, name_data):
  8.     plt.figure(figsize=(20, 18))
  9.     for i in range(len(name_data)):
  10.         plt.subplot(5, 2, i + 1)
  11.         plt.scatter(X[:, i], Y[:, i])
  12.         plt.title(name_data[i])
  13.     plt.savefig("./Feature_Visualization.jpg")
  14.     plt.show()

  15. def create_dataset():
  16.     # 加载数据集
  17.     diabetes = datasets.load_diabetes()
  18.     X = diabetes.data
  19.     Y = diabetes.target
  20.     name_data = diabetes.feature_names
  21.     visualize_feature(X, Y, name_data)
  22.     # 划分训练集和测试集
  23.     x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=11)
  24.     return x_train, y_train, x_test, y_test

  25. x_train, y_train, x_test, y_test = create_dataset()

  26. def Regression(x_train, y_train, x_test, y_test):
  27.     # 初始化参数
  28.     rng = np.random.RandomState(10)
  29.     w = rng.randn(1, x_train.shape[1]).reshape(-1, )
  30.     b = 0
  31.     w_grad_sum = np.zeros((1, x_train.shape[1])).reshape(-1, )
  32.     b_grad_sum = np.zeros((1, 1))
  33.     iteration = 30000
  34.     lr = 1
  35.     lv = 0.0001
  36.     train_acc_list, test_acc_list, epoch_list = [], [], []

  37.     # 训练和预测
  38.     for i in range(iteration):
  39.         w_grad = np.zeros((1, x_train.shape[1])).reshape(-1, )
  40.         b_grad = np.zeros((1, 1))
  41.         y = (np.dot(x_train, w) + b).reshape(-1, 1)

  42.         for j in range(y_train.size):
  43.             w_grad = w_grad - 2 * (y_train[j] - y[j]) * x_train[j] - 2 * lv * np.sum(w)
  44.             b_grad = b_grad - 2 * (y_train[j] - y[j])
  45.         w_grad_sum += w_grad ** 2
  46.         b_grad_sum += b_grad ** 2

  47.         w = w - lr * w_grad / (w_grad_sum ** 0.5)
  48.         b = b - lr * b_grad / (b_grad_sum ** 0.5)
  49.         if i % 200 == 0:
  50.             print("-" * 20)
  51.             train_pred = np.array(np.dot(x_train, w) + b).reshape(-1, 1)
  52.             test_pred = np.array(np.dot(x_test, w) + b).reshape(-1, 1)
  53.             score1 = np.clip(r2_score(y_train, train_pred), 0, 100)
  54.             train_acc_list.append(score1)
  55.             print("Iteration:[{}/{}] Train acc: {}".format(i, iteration, score1))
  56.             score2 = np.clip(r2_score(y_test, test_pred), 0, 100)
  57.             test_acc_list.append(score2)
  58.             print("Iteration:[{}/{}] Test acc: {}".format(i, iteration, score2))
  59.             epoch_list.append(i)

  60.     return train_acc_list, test_acc_list, epoch_list


  61. # %%

  62. # 结果可视化
  63. def visualize_results(epoch, train_acc, test_acc):
  64.     plt.figure()
  65.     plt.plot(epoch, train_acc, c='red', label='train')
  66.     plt.plot(epoch, test_acc, c='blue', label='test')
  67.     plt.xlabel('Epoch')
  68.     plt.ylabel('Acc')
  69.     plt.title('Regression')
  70.     plt.legend()
  71.     plt.savefig("./Regression_results.jpg")
  72.     plt.show()


  73. if __name__ == '__main__':
  74.     train_acc, test_acc, epoch = Regression(x_train, y_train, x_test, y_test)
  75.     visualize_results(epoch, train_acc, test_acc)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 15:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表