机器学习中遇到的报错

(1)ValueError: shapes (1,0) and (1,1) not aligned: 0 (dim 1) != 1 (dim 0)
是在用svm时产生的错误,大概意思是维度没有对齐,强烈建议大家去输出一下参数(矩阵)的形状,这样就比较明显

data.shape
->(1,0)	#这种就是很明显数据没有读出来,是个空值

之所以我这里出现类似这个问题的原因就是readlines()使用不当:

readline()是每次读一行,下次调用的时候就是读取的下一行
readlines()相当于一次读取所有行,读取之后原变量就空了,因为没有下一行了。

所以同一个变量用两次readlines肯定最后一次读出的是空值,这也是为什么我最后输出shape时会出现(1,0)这种异常情况的原因

最后粘贴一下我修改之后的代码:

def loadDataSet(fileName):     #这个是专门用于把一个数据集拆分为训练集和测试集的
    numFeat = len((open(fileName).readline().split(',')))       #这里是读取列数的
    mid=int(len((open(fileName).readlines())) *0.7)            #默认取后30%作为测试集
    print(f'列数{numFeat},中间值{mid},')
    train_dataMat = []; train_labelMat = []
    test_dataMat=[];test_labelMat = []
    fr = open(fileName)    #拆出训练集
    for line in fr.readlines()[1:mid:]: #跳过前面名称,从第二行开始,到分界行
        lineArr = []
        curLine = line.strip().split(',')
        for i in range(1,numFeat - 1):
            lineArr.append(float(curLine[i]))
        train_dataMat.append(lineArr)
        train_labelMat.append(float(curLine[-1]))
        
    fr2 = open(fileName)    #拆出训练集
    for line in fr2.readlines()[mid::]: #跳过前面的分界行,直到最后一行
        lineArr = []
        curLine = line.strip().split(',')
        for i in range(1,numFeat - 1):
            lineArr.append(float(curLine[i]))
        test_dataMat.append(lineArr)
        test_labelMat.append(float(curLine[-1]))
    return train_dataMat,train_labelMat,test_dataMat,test_labelMat
    #返回训练集样本,训练集样本标签,测试集样本,测试集样本标签

(2)numpy.core._exceptions._ArrayMemoryError: Unable to allocate 37.7 GiB for an array with shape (71128, 71128) and data type float64
出现这个的原因是因为数据集太大了,计算机算不过来了,这里我的处理方式是直接删减一些数据(当然这个肯定是最差的解决办法,目前我也还在寻找其他办法)

(3) File "C:\Users\csl\Desktop\AWTBOOST\kaggle数据集_可视化\svm_init.py", line 351, in testRbf print("精确率为: ", TP/(TP+FP)) ZeroDivisionError: division by zero
这个问题我这里是因为样本严重不平衡导致的,比如说信用卡欺诈问题,由于没有欺诈的交易占绝大多数,所以在预测时,模型很有可能出现过拟合,导致预测出来的全是负类或者正类(看你怎么定义),所以就会出现分母为0的情况。
解决方法我这里的也不建议采纳:我的是强行处理数据,进行欠采样把数据集类别调整平衡为止,但是这样会损失大量的数据,特别不推荐
不过如果你用的是svm的话,可能是因为参数没有调好导致的过拟合,建议将gamma值调大一点

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值