数据集快速生成方法集合

在学习机器学习算法的过程中,我们经常需要数据来验证算法,调试参数。但是找到一组十分合适某种特定算法类型的数据样本却不那么容易。下面介绍一些我搜集和整理的数据集快速生成方法及案例:

一、numpy生成随机数据

参考资料:
机器学习算法的随机数据生成
numpy比较适合用来生产一些简单的抽样数据。API都在random类中,常见的API有:

1) rand(d0, d1, …, dn)

用来生成d0×d1×…dn维的数组 。数组的值在[0,1)之间
例如: np.random.rand(3,2,2),输出3×2×2的数组

array([[[ 0.49042678, 0.60643763],
[ 0.18370487, 0.10836908]],
[[ 0.38269728, 0.66130293],
[ 0.5775944 , 0.52354981]],
[[ 0.71705929, 0.89453574],
[ 0.36245334, 0.37545211]]])

2) randn((d0, d1, …, dn)

也是用来生成d0xd1x…dn维的数组。不过数组的值服从N(0,1)的标准正态分布。
例如:np.random.randn(3,2),输出如下3x2的数组,这些值是N(0,1)的抽样数据。

array([[-0.5889483 , -0.34054626],
[-2.03094528, -0.21205145],
[-0.20804811, -0.97289898]])

如果需要服从正态分布,只需要在randn上每个生成的值x上做变换即可 。
例如: 2*np.random.randn(3,2) + 1,输出如下3x2的数组,这些值是N(1,4)的抽样数据。

array([[ 2.32910328, -0.677016 ],
[-0.09049511, 1.04687598],
[ 2.13493001, 3.30025852]])

3) randint(low[, high, size])

生成随机的大小为size的数据,size可以为整数,为矩阵维数,或者张量的维数。值位于半开区间 [low, high)。

例如:np.random.randint(3, size=[2,3,4])返回维数维2x3x4的数据,取值范围为最大值为3的整数。

array([[[2, 1, 2, 1],
[0, 1, 2, 1],
[2, 1, 0, 2]],
[[0, 1, 0, 0],
[1, 1, 2, 1],
[1, 0, 1, 2]]])

再比如: np.random.randint(3, 6, size=[2,3]) 返回维数为2x3的数据。取值范围为[3,6).

array([[4, 5, 3],
[3, 4, 5]])

4) random_integers(low[, high, size])

和上面的randint类似,区别在于取值范围是闭区间[low, high]。

5) random_sample([size])

返回随机的浮点数,在半开区间 [0.0, 1.0)。如果是其他区间[a,b),可以加以转换(b - a) * random_sample([size]) + a
例如: (5-2)*np.random.random_sample(3)+2 返回[2,5)之间的3个随机数。

array([ 2.87037573, 4.33790491, 2.1662832 ])

二、sklearn生成随机数据

scikit-learn生成随机数据的API都在datasets类之中,和numpy比起来,可以用来生成适合特定机器学习模型的数据。常用的API有:

  1. 用make_regression生成回归模型的数据
  2. 用make_hastie_10_2,make_classification或者make_multilabel_classification生成分类模型数据
  3. make_blobs生成聚类模型数据
  4. make_gaussian_quantiles生成分组多维正态分布的数据
2.1 回归模型随机数据

这里我们使用make_regression生成回归模型数据。几个关键参数有n_samples(生成样本数), n_features(样本特征数),noise(样本随机噪音)和coef(是否返回回归系数)。例子代码如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_regression
 
# X为样本特征,y为样本输出, coef为回归系数,共1000个样本,每个样本1个特征
X, y, coef =make_regression(n_samples=1000, n_features=1,noise=10, coef=True)
# 画图
plt.scatter(X, y,  color='black')
plt.plot(X, X*coef, color='blue',linewidth=3)

plt.xticks(())
plt.yticks(())

plt.show()

输出的图如下:
在这里插入图片描述

3.2 分类模型随机数据

这里我们用make_classification生成三元分类模型数据。几个关键参数有n_samples(生成样本数), n_features(样本特征数), n_redundant(冗余特征数)和n_classes(输出的类别数),例子代码如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_classification
 
# X1为样本特征,Y1为样本类别输出, 共400个样本,每个样本2个特征,输出有3个类别,没有冗余特征,每个类别一个簇
X1, Y1 = make_classification(n_samples=400, n_features=2, n_redundant=0,
                             n_clusters_per_class=1, n_classes=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1)
plt.show()

输出的图如下:
在这里插入图片描述

3.3 聚类模型随机数据

这里我们用make_blobs生成聚类模型数据。几个关键参数有n_samples(生成样本数), n_features(样本特征数),centers(簇中心的个数或者自定义的簇中心) 和 cluster_std(簇数据方差,代表簇的聚合程度)。例子如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
 
# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本2个特征,共3个簇,簇中心在[-1,-1], [1,1], [2,2], 簇方差分别为[0.4, 0.5, 0.2]
X, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1,-1], [1,1], [2,2]], cluster_std=[0.4, 0.5, 0.2])
plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)
plt.show()

输出的图如下:
在这里插入图片描述

3.4 分组正态分布混合数据

我们用make_gaussian_quantiles生成分组多维正态分布的数据。几个关键参数有n_samples(生成样本数), n_features(正态分布的维数),mean(特征均值),cov(样本协方差的系数), n_classes(数据在正态分布中按分位数分配的组数)。例子如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_gaussian_quantiles
#生成2维正态分布,生成的数据按分位数分成3组,1000个样本,2个样本特征均值为1和2,协方差系数为2
X1, Y1 = make_gaussian_quantiles(n_samples=1000, n_features=2, n_classes=3, mean=[1,2],cov=2)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1)
plt.show()

输出图如下:

在这里插入图片描述

三、seaborn自带数据集(22个)

seaborn内置了十几个示例数据集,通过load_dataset函数可以调用。

# 查看数据集种类
import seaborn as sns
print(sns.get_dataset_names())
# ['anagrams', 'anscombe', 'attention', 'brain_networks', 'car_crashes', 'diamonds', 'dots', 'dowjones', 'exercise', 'flights', 'fmri', 'geyser', 'glue', 'healthexp', 'iris', 'mpg', 'penguins', 'planets', 'seaice', 'taxis', 'tips', 'titanic']

# 加载数据集
df = sns.load_dataset('titanic')

有时候因为网络问题等原因无法访问。
这时候直接去github上手动下载一下可解决问题
https://github.com/mwaskom/seaborn-data
在这里插入图片描述

下载zip格式文档,下载完且压缩后,放到本地seaborn-data文件夹【文件夹搜索文件夹名即可搜到一个空文件夹】里,就可以正常调用load_dataset函数了。

df = sns.load_dataset('titanic')
print(df.info())

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 15 columns):
 #   Column       Non-Null Count  Dtype   
---  ------       --------------  -----   
 0   survived     891 non-null    int64   
 1   pclass       891 non-null    int64   
 2   sex          891 non-null    object  
 3   age          714 non-null    float64 
 4   sibsp        891 non-null    int64   
 5   parch        891 non-null    int64   
 6   fare         891 non-null    float64 
 7   embarked     889 non-null    object  
 8   class        891 non-null    category
 9   who          891 non-null    object  
 10  adult_male   891 non-null    bool    
 11  deck         203 non-null    category
 12  embark_town  889 non-null    object  
 13  alive        891 non-null    object  
 14  alone        891 non-null    bool    
dtypes: bool(2), category(2), float64(2), int64(4), object(5)
memory usage: 80.7+ KB
None

四、pyod.utils.data生成数据集

参考资料:Pyod文档:https://pyod.readthedocs.io/en/latest/index.html
PyOD是用于检测多元数据中的外围对象的最全面和可扩展的Python库。这一令人兴奋但具有挑战性的领域通常被称为异常检测或异常检测。PyOD包括40多种检测算法,自2017年以来,PyOD[AZNL19]已成功应用于众多学术研究和商业产品,下载量超过800万。
在Pyod中提供了三种数据生成方法可用于快速生成带异常点的数据集:

  • pyod.utils.data.generate_data(n_train=1000, n_test=500, n_features=2, contamination=0.1, train_only=False, offset=10, behaviour=‘new’, random_state=None, n_nan=0, n_inf=0)[source]
    • 用于生成合成数据的实用函数。正态数据由多元高斯分布生成,离群值由均匀分布生成。返回“X_train,X_test,y_TRAINE,y_ test”。
  • pyod.utils.data.generate_data_categorical(n_train=1000, n_test=500, n_features=2, n_informative=2, n_category_in=2, n_category_out=2, contamination=0.1, shuffle=True, random_state=None)[source]
    • 用于生成合成分类数据的实用函数
  • pyod.utils.data.generate_data_clusters(n_train=1000, n_test=500, n_clusters=2, n_features=2, contamination=0.1, size=‘same’, density=‘same’, dist=0.25, random_state=None, return_in_clusters=False)[source]
    • 用于在集群中生成合成数据的实用函数。生成的数据可能涉及低密度模式问题和全局异常值,这被认为是异常值检测算法的困难任务。

下面介绍一下generate_data方法的效果及用法:

from pyod.utils.data import generate_data, get_outliers_inliers

# 创建一个带有异常值的随机数据集并绘制它
# generate random data with two features
X_train, Y_train = generate_data(n_train=1000, train_only=True, n_features=2)
# by default the outlier fraction is 0.1 in generate data function
outlier_fraction = 0.1
# store outliers and inliers in different numpy arrays
x_outliers, x_inliers = get_outliers_inliers(X_train, Y_train)
n_inliers = len(x_inliers)
n_outliers = len(x_outliers)
# separate the two features and use it to plot the data
F1 = X_train[:, [0]].reshape(-1, 1)
F2 = X_train[:, [1]].reshape(-1, 1)
# create a meshgrid
xx, yy = np.meshgrid(np.linspace(-10, 10, 200), np.linspace(-10, 10, 200))
# scatter plot
plt.scatter(F1, F2)
plt.xlabel('F1')
plt.ylabel('F2')
plt.show()

在这里插入图片描述

五、vega_datasets自带数据集(17个)

此软件包有几个目标:

  • 在python中提供对vega-datasets上提供的数据集的直接访问。
  • 以pandas数据框的形式返回结果。
  • 只要数据集大小和/或许可证约束允许,就可以将数据集与包捆绑在一起,以便在没有Web连接的情况下加载数据集。

目前,该包打包了17个数据集。

# pip3 install vega_datasets

from vega_datasets import data, local_data

# 访问数据集
df = data.iris()
print(df.head(5))
#    sepalLength  sepalWidth  petalLength  petalWidth species
# 0          5.1         3.5          1.4         0.2  setosa
# 1          4.9         3.0          1.4         0.2  setosa
# 2          4.7         3.2          1.3         0.2  setosa
# 3          4.6         3.1          1.5         0.2  setosa
# 4          5.0         3.6          1.4         0.2  setosa

# 列出本地数据集
print(local_data.list_datasets())
# ['airports', 'anscombe', 'barley', 'burtin', 'cars', 'crimea', 'driving', 'iowa-electricity', 'iris', 'la-riots', 'ohlc', 'seattle-temps', 'seattle-weather', 'sf-temps', 'stocks', 'us-employment', 'wheat']

# 数据集描述信息
print(data.iris.description)
# This classic dataset contains lengths and widths of petals and sepals for 150 iris flowers, drawn from three species. It was introduced by R.A. Fisher in 1936 [1]_.

六、各平台公开数据集

网络上还有很多有趣的公共数据集可以用来练习机器学习和深度学习,我整理了一些常用的网站供大家查阅。

  1. 百度aistudio数据集:https://aistudio.baidu.com/aistudio/datasetoverview
  2. 阿里天池数据集:https://tianchi.aliyun.com/dataset
  3. 科大讯飞数据集:https://challenge.xfyun.cn(AI开发者大赛,参赛获取数据集)
  4. Kaggle数据集:https://www.kaggle.com/datasets
  5. AIOPS智能运维数据集:https://www.aiops-challenge.com
  6. 千言开源数据集:
    1. 千言是由百度联合中国计算机学会、中国中文信息学会共同发起的面向自然语言处理的开源数据集项目,携手高校和企业的数据资源研发者共同建设中文开源数据集,旨在推动中文信息处理技术的进步。千言开源数据集项目自 2020 年 8 月发布以来,吸引来自清华、哈工大、中科院、美团、腾讯、OPPO 等近20家企业和高校的数据集作者加入共同建设。目前,千言已经针对十余个任务,汇集了近50个开源数据集。
    2. https://mp.weixin.qq.com/s/bZXVfhhekUCi_hjIXC8f2Q
  7. NasaPcoe数据集:https://www.nasa.gov/intelligent-systems-division
  8. 和鲸社区数据集:https://www.heywhale.com/home/dataset
  9. datafountain数据集:https://www.datafountain.cn/datasets
  10. 伏龙平台电池数据集:https://docs.vloong.thinkenergy.tech/vloong/dev_resources/public_dataset
  11. 【开源】23个优秀的机器学习数据集及介绍:https://www.yuque.com/seafyliang/tahcx7/hmezld
  12. 50个机器学习公共数据集:https://mp.weixin.qq.com/s/Gr6jGYN2kmLdXTL2GE9TzQ
  13. 10个免费数据源:https://mp.weixin.qq.com/s/yUbzF83ur1dY2pqTSjhOSQ
为了将Java集合数据生成为图片文件并保存,您可以使用Java的第三方库JFreeChart。JFreeChart是一个开源的Java图表库,可以用于创建各种类型的图表,包括折线图、柱状图、饼图等。以下是一个简单的示例代码,演示如何使用JFreeChart将Java集合数据生成为柱状图并保存为图片文件: ```java import java.awt.Color; import java.awt.Font; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.data.category.DefaultCategoryDataset; public class ChartDemo { public static void main(String[] args) { // 创建数据集 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(1, "Series 1", "Category 1"); dataset.addValue(2, "Series 1", "Category 2"); dataset.addValue(3, "Series 1", "Category 3"); dataset.addValue(4, "Series 1", "Category 4"); dataset.addValue(5, "Series 1", "Category 5"); // 创建柱状图 JFreeChart chart = ChartFactory.createBarChart( "Chart Title", // 图表标题 "Category", // X轴标签 "Value", // Y轴标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向 true, // 是否显示图例 true, // 是否显示工具提示 false // 是否生成URL链接 ); // 设置图表样式 chart.setBackgroundPaint(Color.white); CategoryPlot plot = chart.getCategoryPlot(); plot.setBackgroundPaint(Color.lightGray); plot.setRangeGridlinePaint(Color.white); // 设置X轴样式 CategoryAxis domainAxis = plot.getDomainAxis(); domainAxis.setLabelFont(new Font("宋体", Font.BOLD, 14)); domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12)); // 设置Y轴样式 NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setLabelFont(new Font("宋体", Font.BOLD, 14)); rangeAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12)); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); // 设置柱状图样式 BarRenderer renderer = (BarRenderer) plot.getRenderer(); renderer.setDrawBarOutline(false); renderer.setMaximumBarWidth(0.05); // 保存为图片文件 try { ChartUtilities.saveChartAsJPEG(new File("chart.jpg"), chart, 800, 600); } catch (IOException e) { e.printStackTrace(); } } } ``` 该示例代码将生成一个包含5个数据点的柱状图,并将其保存为名为“chart.jpg”的JPEG文件。您可以根据需要修改数据集、图表样式和保存文件的路径和格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值