Maison  >  Article  >  développement back-end  >  Introduction aux méthodes de génération de données aléatoires pour les algorithmes d'apprentissage automatique

Introduction aux méthodes de génération de données aléatoires pour les algorithmes d'apprentissage automatique

高洛峰
高洛峰original
2017-03-19 16:57:201912parcourir

Dans le processus d'apprentissage des algorithmes d'apprentissage automatique, nous avons souvent besoin de données pour vérifier l'algorithme et déboguer les paramètres. Mais trouver un ensemble d’échantillons de données bien adaptés à un type d’algorithme particulier n’est pas si simple. Heureusement, numpy et scikit-learn fournissent tous deux des fonctions de génération de données aléatoires. Nous pouvons générer nous-mêmes des données adaptées à un certain modèle , utiliser des données aléatoires pour nettoyer, normaliser, transformer, puis sélectionner un modèle et effectuer l'ajustement. prédiction avec des algorithmes. Ce qui suit est un résumé de la façon dont scikit-learn et numpy génèrent des échantillons de données.

1. Génération de données aléatoires NumpyAPI

Numpy est plus approprié pour produire des données d'échantillonnage simples. Les API sont toutes dans la classe aléatoire. Les API courantes sont :

1) rand(d0, d1, ..., dn) est utilisé pour générer un tableau . La valeur du tableau est comprise entre [0,1]

Par exemple : np.random.rand(3,2,2), affiche le tableau 3x2x2 suivant

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), est également utilisé pour générer un tableau dimensionnel d0xd1x...dn. Cependant, la valeur du tableau obéit à la distribution normale standard de N(0,1) .

Par exemple : np.random.randn(3,2), affichez le tableau 3x2 suivant, ces valeurs​​sont des données échantillonnées de N(0,1) . si nécessaire, en obéissant à la distribution normale de N(μ,σ2)N(μ,σ2), il suffit de transformer σx μσx μ sur chaque valeur générée x sur randn, par exemple :

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

Par exemple : 2*np.random.randn(3,2) 1, affiche le tableau 3x2 suivant, ces valeurs​​sont des données échantillonnées de N(1,4)


3. )randint(low[, high, size]), génère des données aléatoires de taille size peut être

entier

, qui est la dimension matricielle ou la dimension tensorielle. Les valeurs se situent dans l'intervalle semi-ouvert [bas, haut).

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

Par exemple : np.random.randint(3, size=[2,3,4]) renvoie des données avec la dimension 2x3x4. La plage de valeurs est un nombre entier avec une valeur maximale de 3.


Autre exemple : np.random.randint(3, 6, size=[2,3]) renvoie des données avec une dimension de 2x3. La plage de valeurs est [3,6).

4) random_integers(low[, high, size]), similaire au randint ci-dessus, la différence est que la plage de valeurs est un intervalle fermé [low , haut].
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]]])

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

5) random_sample([size]), renvoie un nombre aléatoire à virgule flottante dans l'intervalle semi-ouvert [0.0, 1.0). S'il s'agit d'autres intervalles [a, b), il peut être converti (b - a) * random_sample([size]) a

Par exemple : (5-2)*np.random.random_sample(3 ) 2 Renvoie 3 nombres aléatoires entre [2,5).

2. Introduction à l'API de génération de données aléatoires scikit-learn

Les API permettant à scikit-learn de générer des données aléatoires sont toutes dans la classe des ensembles de données. Par rapport à numpy, cela peut. être utilisé pour générer des données appropriées pour un modèle d’apprentissage automatique spécifique. Les API couramment utilisées sont :

array([ 2.87037573,  4.33790491,  2.1662832 ])
1) Utilisez make_regression pour générer des données de modèle de régression

2) Utilisez make_hastie_10_2, make_classification ou make_multilabel_classification pour générer des données de modèle de classification

3) Utilisez make_blobs pour générer des données de modèle de classe de clusters

4) Utilisez make_gaussian_quantiles pour générer des données distribuées normales multidimensionnelles groupées

3. Exemple de génération de données aléatoires scikit-learn

3.1 Données aléatoires du modèle de régression.

Ici, nous utilisons make_regression pour générer des données de modèle de régression. Plusieurs paramètres clés sont n_samples (nombre d'échantillons générés), n_features (nombre de caractéristiques d'échantillon), noise (échantillon de bruit aléatoire) et coef (si les coefficients de régression doivent être renvoyés). L'exemple de code est le suivant :

Le graphique de sortie est le suivant :

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
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=&#39;black&#39;)
plt.plot(X, X*coef, color=&#39;blue&#39;, linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()

3.2 Données aléatoires du modèle de classification

Ici nous utilisons make_classification pour générer trois données de modèle de métaclassification. Plusieurs paramètres clés incluent n_samples (nombre d'échantillons générés), n_features (nombre d'échantillons de fonctionnalités), n_redundant (nombre de fonctionnalités redondantes) et n_classes (nombre de catégories de sortie) L'exemple de code est le suivant : Introduction aux méthodes de génération de données aléatoires pour les algorithmes dapprentissage automatique

<.>

Le graphique de sortie est le suivant :

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
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=&#39;o&#39;, c=Y1)
plt.show()


3.3 Données aléatoires du modèle de clustering

Ici, nous utilisons make_blobs pour générer données du modèle de clustering. Plusieurs paramètres clés incluent n_samples (nombre d'échantillons générés), n_features (nombre de caractéristiques d'échantillon), centres (nombre de centres de cluster ou de centres de cluster personnalisés) et cluster_std (variance des données du cluster, représentant le degré d'agrégation du cluster). L'exemple est le suivant :

Introduction aux méthodes de génération de données aléatoires pour les algorithmes dapprentissage automatique

L'image de sortie est la suivante :

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
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=&#39;o&#39;, 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
%matplotlib inline
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=&#39;o&#39;, c=Y1)


输出图如下

Introduction aux méthodes de génération de données aléatoires pour les algorithmes dapprentissage automatique

以上就是生产随机数据的一个总结,希望可以帮到学习机器学习算法的朋友们。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn