使用 Scikit-Learn 的人工数据集

本文介绍了如何使用Python和Scikit-Learn库生成合成数据,以供机器学习算法训练。通过示例展示了如何创建分类和聚类数据,并进行可视化。还提供了将生成的数据保存和读取的方法,以及解决不同练习的代码示例。
摘要由CSDN通过智能技术生成

使用 Python 生成合成数据

机器人创造数据

机器学习的一个问题,尤其是当您刚开始并想了解算法时,通常很难获得合适的测试数据。有些要花很多钱,有些则不能免费获得,因为它们受版权保护。因此,在某些情况下,人工生成的测试数据可以是一种解决方案。

出于这个原因,我们教程的这一章涉及人工生成数据。本章是关于创建人工数据。在我们教程的前几章中,我们了解到 Scikit-Learn (sklearn) 包含不同的数据集。一方面,有小的玩具数据集,但它也提供更大的数据集,这些数据集通常在机器学习社区中用于测试算法或作为基准。它为我们提供了来自“现实世界”的数据。

所有这些都很棒,但在许多情况下,这仍然不够。也许您找到了正确的数据类型,但您需要更多此类数据,或者数据并不完全是您要查找的数据类型,例如,您可能需要更复杂或更不复杂的数据。这是您应该考虑自己创建数据的地方。在这里,sklearn提供帮助。它包括各种随机样本生成器,可用于创建定制的人工数据集。满足您对大小和复杂性的想法的数据集。

以下 Python 代码是一个简单示例,我们在其中为一些德国城市创建了人工天气数据。我们使用 Pandas 和 Numpy 来创建数据:

import  numpy  as  np 
import  pandas  as  pd


城市 =  [ ‘柏林’ ‘法兰克福’ ‘汉堡’ ‘纽伦堡’ ‘慕尼黑’ ‘斯图加特’ ‘汉诺威’ ‘萨尔布吕肯’ ‘科隆’ ‘康斯坦茨’ ‘弗莱堡’ ‘卡尔鲁厄’ 
         ]

n =  len (城市)
数据 =  { '温度' : np 随机的正常( 24 ,  3 ,  n ), 
        '湿度' :  np 随机的正常( 78 ,  2.5 ,  n ), 
        'Wind' :  np 随机的正常( 15 ,  4 ,  n ) 
       } 
df  =  pd. DataFrame (数据=数据, 索引=城市)
df
  温度 湿度
柏林 26.133572 80.328353 5.015542
法兰克福 23.161901 76.886831 14.021860
汉堡 24.145767 79.678764 10.897413
纽伦堡 27.114319 77.825100 21.273423
慕尼黑 24.573419 74.416920 21.734649
斯图加特 20.615747 81.827868 6.316270
汉诺威 26.513550 80.462603 9.568481
萨尔布吕肯 23.602173 83.181582 11.382041
科隆 27.769321 79.759665 11.433353
康斯坦斯 29.343985 78.814028 17.818053
弗莱堡 25.554123 77.339895 7.965502
卡尔斯鲁厄 19.780618 76.517790 6.304491

另一个例子

我们将为四种不存在的花卉创建人工数据。如果这些名字让你想起编程语言和披萨,那绝非巧合:

  • Flos Pythonem
  • 爪哇
  • 弗洛斯玛格丽塔酒
  • 人工花

RGB 平均颜色值相应地为:

  • (255, 0, 0)
  • (245, 107, 0)
  • (206, 99, 1)
  • (255, 254, 101)

花萼的平均直径为:

  • 3.8
  • 3.3
  • 4.1
  • 2.9
Flos pythonem
(254, 0, 0)
Flos Java
(245, 107, 0)
弗洛斯玛格丽塔
(206, 99, 1)
人工花链
(255, 254, 101)
import  matplotlib.pyplot  as  plt 
import  numpy  as  np 
import  pandas  as  pd

 scipy.stats 导入 truncnorm

def  truncated_normal ( mean = 0 ,  sd = 1 ,  low = 0 ,  upp = 10 ,  type = int ): 
    return  truncnorm ( 
        ( low  -  mean )  /  sd ,  ( upp  -  mean )  /  sd ,  loc = mean ,  scale = sd )

def  truncated_normal_floats ( mean = 0 ,  sd = 1 ,  low = 0 ,  upp = 10 ,  num = 100 ): 
    res  =  truncated_normal ( mean = mean ,  sd = sd ,  low = low ,  upp = upp )
    返回 res RVS (NUM )

def  truncated_normal_ints ( mean = 0 ,  sd = 1 ,  low = 0 ,  upp = 10 ,  num = 100 ): 
    res  =  truncated_normal ( mean = mean ,  sd = sd ,  low = low ,  upp = upp )
    返回 res RVS (NUM )类型( np .uint8 )

#项为每个花类的数目:
number_of_items_per_class  =  [ 190 , 205 , 230 , 170 ]
花 =  {} 
#FLOS Pythonem:
NUMBER_OF_ITEMS  =  number_of_items_per_class [ 0 ]
的红色 =  truncated_normal_ints (平均值= 254 , SD = 18 , 低= 235 , upp = 256 , 
                             num = number_of_items )
果岭 =  truncated_normal_ints (平均值= 107 , SD = 11 , 低= 88 , UPP = 127 ,
                             NUM = NUMBER_OF_ITEMS )
蓝调 =  truncated_normal_ints (平均值= 0 , SD = 15 , 低= 0 , UPP = 20 ,
                             NUM = NUMBER_OF_ITEMS )
calyx_dia  =  truncated_normal_floats ( 3.8,  0.3 ,  3.4 ,  4.2 , 
                             num = number_of_items ) 
data  =  np . column_stack (( reds ,  greens ,  blues ,  calyx_dia ))
花[ "flos_pythonem" ]  = 数据

#FLOS爪哇:
NUMBER_OF_ITEMS  =  number_of_items_per_class [ 1 ]
的红色 =  truncated_normal_ints (平均值= 245 , SD = 17 , 低= 226 , UPP = 256 ,
                             NUM = NUMBER_OF_ITEMS )
果岭 =  truncated_normal_ints (平均值= 107 , SD = 11 , 低= 88 , upp = 127 ,
                             NUM = NUMBER_OF_ITEMS )
蓝调 =  truncated_normal_ints (平均值= 0 , SD = 10 , 低= 0 , UPP = 20 ,
                             NUM = NUMBER_OF_ITEMS
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值