我已经浏览了关于 n_featurescenters 函数中的 make_blobsSciKit 参数的文档。但是,由于我是 SciKit 和数学的新手,所以我所看到的每一个解释对我来说都不是很清楚。我想知道这两个参数有什么作用: n_features , centersmake_blobs 中的作用如下。

make_blobs(n_samples=50, n_features=2, centers=2, random_state=75)

先感谢您。

最佳答案

make_blobs 函数是 sklearn.datasets.samples_generator 的一部分。包中的所有方法,帮助我们生成数据样本或数据集。在 scikit-learn 的机器学习中,数据集用于评估机器学习模型的性能。这是一个关于如何评估 KNN classifier 的示例:

from sklearn.datasets.samples_generator import make_blobs
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

X, y = make_blobs(n_features=2, centers=3)
X_train, X_test, y_train, y_test = train_test_split(X, y)
model = KNeighborsClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred) * 100
print('accuracy: {}%'.format(acc))

现在,正如您所提到的,n_features 确定了生成的数据集将具有多少列或特征。在机器学习中,特征对应于数值特征数据。例如,在 Iris Dataset 中,有 4 个特征(萼片长度、萼片宽度、花瓣长度和花瓣宽度),因此数据集中有 4 个数字列。因此,通过增加 n_features 中的 make_blobs ,我们添加了更多特征,从而增加了生成数据集的复杂性。

至于 centers ,通过可视化生成的数据集更容易理解。我使用 matplotlib 来帮助我们:
from sklearn.datasets.samples_generator import make_blobs
import matplot

# plot 1
X, y = make_blobs(n_features=2, centers=1)
plt.figure()
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.savefig('centers_1.png')
plt.title('centers = 1')

# plot 2
X, y = make_blobs(n_features=2, centers=2)
plt.figure()
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title('centers = 2')

# plot 3
X, y = make_blobs(n_features=2, centers=3)
plt.figure()
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title('centers = 3')

plt.show()

scikit-learn - SciKit 的 make_blobs 中的  "n_features"和  "centers"参数是什么意思?-LMLPHP

scikit-learn - SciKit 的 make_blobs 中的  "n_features"和  "centers"参数是什么意思?-LMLPHP

scikit-learn - SciKit 的 make_blobs 中的  "n_features"和  "centers"参数是什么意思?-LMLPHP

如果您运行上面的代码,您可以很容易地看到 centers 对应于数据中生成的类数。它使用中心作为术语,因为属于同一类的样本倾向于聚集在中心(坐标)附近。

关于scikit-learn - SciKit 的 make_blobs 中的 "n_features"和 "centers"参数是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51709878/

10-13 00:06