鱼C论坛

 找回密码
 立即注册
查看: 2397|回复: 2

python内存释放问题

[复制链接]
发表于 2021-5-13 22:53:43 | 显示全部楼层 |阅读模式
40鱼币
本帖最后由 方大侠 于 2021-5-14 12:33 编辑

train.rar (8.87 KB, 下载次数: 0)

我写了一个机器学习svm用哪些参数能够让预测误差最小的一个简单代码。。。不过运行了一段时间内存就爆了。。

我del掉了list好像没什么用,可能的原因估计是split出来的数据python没有自动删除。。。这该怎么办呀

不应该是变量名指向新的内存,旧的内存空间就自动释放了吗
这里的x_train,y_train,x_valid,y_valid 指向新的内存不应该就自动释放了。。

  1. # -*- coding:
  2. import numpy as np  # linear algebra
  3. import pandas as pd  # data processing
  4. from sklearn import svm

  5. train_data = pd.read_csv('train.csv')
  6. print('The shape of the train_data is: {}\n'.format(train_data.shape))


  7. def split(data, pt, size):
  8.     valid_data = data[pt:pt + size]
  9.     train_data = data[0:pt].append(data[pt + size:])

  10.     y_valid = valid_data.Survived.values.reshape(-1, 1)
  11.     y_train = train_data.Survived.values.reshape(-1, 1)

  12.     x_train = train_data.drop(columns=['Survived']).values
  13.     x_valid = valid_data.drop(columns=['Survived']).values

  14.     return x_train, y_train, x_valid, y_valid


  15. m = train_data.shape[0]
  16. sub_size = m // 10

  17. ec_dict = {}
  18. for d in range(1, 5):
  19.     list_error = []
  20.     list_c = []
  21.     for exp in range(-20, 21):
  22.         pt = 0
  23.         sum = 0
  24.         for i in range(1, 11):
  25.             x_train, y_train, x_valid, y_valid = split(train_data, pt, sub_size)
  26.             pt = pt + 89
  27.             svc = svm.SVC(C=2 ** (exp * 0.5), kernel='poly', degree=d)
  28.             svc.fit(x_train, y_train.ravel())
  29.             score = 1 - svc.score(x_valid, y_valid.ravel())
  30.             sum = sum + score
  31.             print('i:',i)
  32.         sum = sum / 10
  33.         list_error.append(sum)
  34.         list_c.append(exp)
  35.         print('c:',exp)

  36.     min_error = min(list_error)
  37.     index = list_error.index(min_error)
  38.     min_c = list_c[index]
  39.     print("d: %d, c: %.10f, error: %f" % (d, min_c, min_error))
  40.     ec_dict['error' + str(d)] = list_error
  41.     ec_dict['c' + str(d)] = list_c
  42.     del list_error, list_c
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-13 22:54:43 | 显示全部楼层
python还有哪些情况需要手动释放内存呀
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-14 14:34:07 | 显示全部楼层
好像解决了。。。应该是模型的拟合时间复杂度的问题。。。不是内存的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 21:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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