不平衡数据集的获取

from bao import *
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib.font_manager as fm
myfont=fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')
np.random.seed(668)
#random_state = 2
df = pd.read_csv(
'C:\\Users\\宝荣\\Desktop\\数据\\zhiyintu.csv')
X2=df.iloc[:,4:6]   #比值系数 
X3=df.iloc[:,8:11]  #单位向量
y1=df['guzhang'] 
        


def bupinghengdu(y,k):#len(y)控制待生成的不平衡个数
    T1 = []           #k控制不平衡度的偏移,避免np.random.
    i=0               #randn生成像0.02这种数据,
    while i<len(y):   #循环生成不平衡度,避免出现0值
        a=abs(np.random.randn())+k
        if a==0:
            continue
        else:
            T1.append(a)
            i=i+1
    return T1
T = bupinghengdu(y1,0.2)        

datasets =[]
def shuju1(J,T):#j控制不考虑数据不平衡时数据扩充量的大小
    XD=[]       #T控制每个类别数据不平衡的比例
    yD=[]  
    for i,h in zip(range(len(y1)),T):
        j=round(J*h)
        XX=X2[i:i+1]
        yy=y1[i:i+1]
        XXX = (np.tile(np.array(XX),(j,1)) + 
             abs(np.tile(np.array(XX),(j,1)))*
               0.075*np.random.randn(1*j,2))
        yyy = np.tile(np.array(yy),(j)) 
        XD.append(XXX)
        yD.append(yyy)
        data=(XXX,yyy)
        datasets.append(data)
    XXXXw=(np.r_[#将每一类的故障数据集合到一起
                 XD[0],XD[1],XD[2],XD[3],XD[4],
                 XD[5],XD[6],XD[7],XD[8],XD[9],
                  XD[10],XD[11],XD[12]] ) 
    yyyyw=(np.r_[
                 yD[0],yD[1],yD[2],yD[3],yD[4],
                 yD[5],yD[6],yD[7],yD[8],yD[9],
                 yD[10],yD[11],yD[12]
                 ])
    return XXXXw,yyyyw,datasets

XXXX,yyyy,datasets=shuju1(100,T)
print("\n扩充的训练数据量为:{}".format(len(XXXX)))     



def huitu(YY):
    s = set(YY)#去除重复元素后,看数据有哪些值
    dict1={}
    for i in s:
        j = YY.tolist().count(i)#计算每个元素数目
        dict1[i] = j     #将元素和其数目以字典形式储存
    #print(dict1)
    #print(len(dict1))
    A=[]
    B=[]
    for i in dict1:
        A.append(i)
        B.append(dict1[i])
    plt.figure(figsize=(23,12.5))
    for i,j in zip(A,B):
        plt.text(i,j,(j),fontsize=35) 
    plt.bar(A,B,align='center',ecolor='g',
            color='#A9A9A9',label='各类别故障个数')
    plt.legend(prop=myfont,loc='upper center')
    plt.scatter(A,B,color='r',lw=3, marker='o')
    plt.rcParams.update({'font.size': 30}) 
    plt.xticks(np.arange(1,14),
    ['故障1','故障2','故障3','故障4','故障5'
     ,'故障6','故障7','故障8','故障9','故障10'
     ,'故障11','故障12','故障13'],rotation=45)
huitu(yyyy)   

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值