添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

由于工作数据量较大,训练模型很少直接单机python,一般都采用SparkML,最近把SparkML的工作使用python简单的写了一下,先写个上下采样,最终目的是为了让正负样本达到均衡(有人问:正负样本必须是1:1吗?1:1效果就一定最好吗?答:不一定)

共20条数据,正样本1共有5条,负样本0共有15条。

基础知识准备

  1. 如何获取dataframe的行数
    pandas.DataFrame.shape 返回数据帧的形状
df.shape[0]  返回行数
de.shape[1]  返回列数

或者直接使用

len(df)

当然如果要统计每个字段不同类别的数量,可以类似于SQL中的count(*) group by 操作

df.groupby('字段名').size()
  1. 创建一个数据结构和之前一致,但空的dataframe
df = df.iloc[0:0].copy()
df.drop(df.index, inplace=True)
df_1 = df.drop(range(len(df)),axis=0)

读取数据和获取正负样本数量

import pandas as pd
data = pd.read_csv('./test.csv')
# 获取正样本的数量
z = data[data['label'] == 1]
# 获取负样本的数量
f = data[data['label'] == 0]

就是不断复制样本少的数据达到和样本多的数据平衡

frac = int(len(f) / len(z))
# 创建一个数据结构和之前一致,但空的dataframe
zcopy = z.iloc[0:0].copy()
# 上采样就是复制少量的样本直到和多量的达到平衡
for i in range(frac):
    if i != frac:
        zcopy = zcopy.append(z)  
sample_data = pd.concat([zcopy,f])

查看采样的结果:
在这里插入图片描述

下采样就是从多量的样本中抽取一部分数据直到和少量的样本达到平衡

  1. 利用dataframe的sample方法
frac = float(len(z) / len(f))
# 下采样就是从多量的样本中抽取一部分数据直到和少量的样本达到平衡
sample_data = pd.concat([f.sample(frac=frac),z])

结果:
在这里插入图片描述
2. 利用np.random.choice() (个人感觉有点繁琐,不推荐)

import numpy as np
# 得到所有正样本的索引
z_index = np.array(z.index)
# 下采样就是从多量的样本中抽取一部分数据直到和少量的样本达到平衡,并取其索引
random_f_index = np.random.choice(f.index,len(z),replace = False)
random_f_index = np.array(random_f_index)
# 有了正样本负样本后把它们的索引都拿到手
under_sample_indices = np.concatenate([z_index,random_f_index])
# 根据索引得到下采样所有样本点
under_sample_data = data.iloc[under_sample_indices,:]
                    前言由于工作数据量较大,训练模型很少直接单机python,一般都采用SparkML,最近把SparkML的工作使用python简单的写了一下,先写个上下采样,最终目的是为了让正负样本达到均衡(有人问:正负样本必须是1:1吗?1:1效果就一定最好吗?答:不一定)数据准备共20条数据,正样本1共有5条,负样本0共有15条。基础知识准备如何获取dataframe的行数pandas.DataFrame.shape  返回数据帧的形状df.shape[0]  返回行数de.shape[1]  返
				
一、下采样 所有数据存在DataFrame对象df中。数据分为两类:多数类别和少数类别,数据量相差大。数据预处理已将多数类别的Label标记为1,少数类别的Label标记为0。从多数类中随机抽取样本(抽取的样本数量与少数类别样本量一致)从而减少多数类别样本数据,使数据达到平衡的方式。 import numpy as np import pandas as pd def lower_sam...
分类问题中,经常会碰到类别极度不平衡的情况,这个时候可对样本进行上下采样,让训练数据集的类别接近平衡即可。 数据格式是一个dataframe,数据分为两类:多数类别和少数类别,数据量相差大。一般而言一个数据集中负样本数量远远大于正样本,故数据预处理已将多数类别的Label标记为0,少数类别的Label标记为1。以下分别是python实现采样代码: 一.下采样采样则是从多数量的类别中随机抽取样本(抽取的样本数量与少数类别样本量一致)从而减少多数量的类别样本数据,使数据达到平衡的方式。 impor
K-Means欠采样python实现 1. K-Means欠采样原理 为解决分类问题中效果受样本集类间不平衡,并提高训练样本的多样性,可以使用K-Means欠采样对样本进行平衡处理。该方法利用K-means方法对大类样本聚类,形成与小类样本个数相同的簇类数,从每个簇中随机抽取单个样本与风险样本形成平衡样本集。K-means欠采样过程如下: Step1:随机初始化k个聚类中心,分别为uj(1,2,…,k); Step2:对于大样本xi(1,2,…,n),计算样本到每个聚类中心uj的距离,将xi划分到聚类最小的簇,c(i)为样本i与k个类中距离最近的那个类,c(i)的值为1到k中的一个,则c(i)