Heim >Backend-Entwicklung >Python-Tutorial >Einführung in Zufallsdatengenerierungsmethoden für maschinelle Lernalgorithmen

Einführung in Zufallsdatengenerierungsmethoden für maschinelle Lernalgorithmen

高洛峰
高洛峰Original
2017-03-19 16:57:201961Durchsuche

Im Prozess des Erlernens von Algorithmen für maschinelles Lernen benötigen wir häufig Daten zur Überprüfung des Algorithmus und der Debug- Parameter. Es ist jedoch nicht so einfach, einen Satz von Datenbeispielen zu finden, die für einen bestimmten Algorithmustyp gut geeignet sind. Glücklicherweise bieten sowohl Numpy als auch Scikit-Learn Funktionen zur Generierung zufälliger Daten. Wir können selbst Daten generieren, die für ein bestimmtes Modell geeignet sind, Zufallsdaten zum Bereinigen, Normalisieren und Transformieren verwenden und dann ein Modell auswählen Vorhersage mit Algorithmen. Im Folgenden finden Sie eine Zusammenfassung, wie scikit-learn und numpy Datenbeispiele generieren.

1. Numpy-ZufallsdatengenerierungAPI

Numpy eignet sich besser für die Erstellung einiger einfacher Stichprobendaten. Die APIs sind alle in der Zufallsklasse. Gängige APIs sind:

1) rand(d0, d1, ..., dn) wird verwendet, um ein d0xd1x...dn-dimensionales Array. Der Wert des Arrays liegt zwischen [0,1]

Zum Beispiel: np.random.rand(3,2,2), geben Sie das folgende 3x2x2-Array aus

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) wird auch zum Generieren eines d0xd1x...dn-dimensionalen Arrays verwendet. Der Wert des Arrays folgt jedoch der Standardnormalverteilung von N(0,1) . Zum Beispiel: np.random.randn(3,2), geben Sie das folgende 3x2-Array aus, diese Werte sind abgetastete Daten von N(0,1) Bei Bedarf müssen Sie nur σx+μσx+μ auf jeden generierten Wert x auf randn transformieren, um der Normalverteilung von N(μ,σ2)N(μ,σ2) zu entsprechen:

array([[-0.5889483 , -0.34054626],
       [-2.03094528, -0.21205145],
       [-0.20804811, -0.97289898]])
Zum Beispiel: 2*np.random.randn(3,2) + 1, geben Sie das folgende 3x2-Array aus, diese Werte sind abgetastete Daten von N(1,4)

<.>3) randint(low[, high, size]), generiert zufällige Daten der Größe size, size kann eine

Ganzzahl
sein, was die Matrixdimension oder die Tensordimension ist. Werte liegen im halboffenen Intervall [niedrig, hoch).

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

Zum Beispiel: np.random.randint(3, size=[2,3,4]) gibt Daten mit der Dimension 2x3x4 zurück. Der Wertebereich ist eine ganze Zahl mit einem Maximalwert von 3.

Ein weiteres Beispiel: np.random.randint(3, 6, size=[2,3]) gibt Daten mit einer Dimension von 2x3 zurück. Der Wertebereich ist [3,6).


4) random_integers(low[, high, size]), ähnlich wie Randint oben, der Unterschied besteht darin, dass der Wertebereich ein geschlossenes Intervall [low , hoch].

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]]])

5) random_sample([size]), gibt eine zufällige Gleitkommazahl im halboffenen Intervall [0,0, 1,0) zurück. Wenn es sich um andere Intervalle [a,b) handelt, kann es konvertiert werden (b - a) * random_sample([size]) + a
array([[4, 5, 3],
   [3, 4, 5]])

Zum Beispiel: (5-2)*np.random.random_sample( 3)+ 2 Gibt 3 Zufallszahlen zwischen [2,5) zurück.


2. Einführung in die Scikit-Learn-API zur Zufallsdatengenerierung

Die APIs für Scikit-Learn zur Generierung von Zufallsdaten sind alle in der Datasets-Klasse, es kann sein Wird verwendet, um geeignete Daten für ein bestimmtes maschinelles Lernmodell zu generieren. Häufig verwendete APIs sind:

1) Verwenden Sie make_regression, um Regressionsmodelldaten zu generieren

array([ 2.87037573,  4.33790491,  2.1662832 ])
2) Verwenden Sie make_hastie_10_2, make_classification oder make_multilabel_classification, um Klassifizierungsmodelldaten zu generieren

3) Verwenden Sie make_blobs, um Generieren Sie Cluster-Klassenmodelldaten

4) Verwenden Sie make_gaussian_quantiles, um gruppierte mehrdimensionale normalverteilte Daten zu generieren

3. Beispiel für die Generierung von Zufallsdaten mit scikit-learn

3.1 Zufallsdaten des Regressionsmodells

Hier verwenden wir make_regression, um Regressionsmodelldaten zu generieren. Zu den Schlüsselparametern gehören n_samples (Anzahl der generierten Stichproben), n_features (Anzahl der Stichprobenmerkmale), Noise (zufälliges Stichprobenrauschen) und coef (ob Regressionskoeffizienten zurückgegeben werden sollen). Der Beispielcode lautet wie folgt:

Das Ausgabediagramm lautet wie folgt:

3.2 Zufallsdaten des Klassifizierungsmodells
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()

Hier Wir verwenden make_classification, um drei Metaklassifizierungsmodelldaten zu generieren. Zu den Schlüsselparametern gehören n_samples (Anzahl der generierten Samples), n_features (Anzahl der Beispiel-Features), n_redundant (Anzahl der redundanten Features) und n_classes (Anzahl der Ausgabekategorien). Der Beispielcode lautet wie folgt:

Einführung in Zufallsdatengenerierungsmethoden für maschinelle Lernalgorithmen

Das Ausgabediagramm sieht wie folgt aus:

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 Zufallsdaten des Clustering-Modells

Hier verwenden wir make_blobs zum Generieren Clustering von Modelldaten. Zu den Schlüsselparametern gehören n_samples (Anzahl der generierten Stichproben), n_features (Anzahl der Stichprobenmerkmale), centres (Anzahl der Clusterzentren oder benutzerdefinierten Clusterzentren) und cluster_std (Clusterdatenvarianz, die den Grad der Clusteraggregation darstellt). Das Beispiel sieht wie folgt aus:

Einführung in Zufallsdatengenerierungsmethoden für maschinelle Lernalgorithmen

Das Ausgabebild sieht wie folgt aus:

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)


输出图如下

Einführung in Zufallsdatengenerierungsmethoden für maschinelle Lernalgorithmen

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

Das obige ist der detaillierte Inhalt vonEinführung in Zufallsdatengenerierungsmethoden für maschinelle Lernalgorithmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn