如何使用sklearn.datasets.make_classification生成线性可分数据集?

时间:2017-12-24 14:44:01

标签: python scikit-learn dataset

我使用override func viewDidLoad() { super.viewDidLoad() findCordiante(adress: "Cupertino, California, U.S.") { string in // use `string` here ... if let string = string { self.latLong = string print(string) } else { print("not found") } } // ... but not here, because the above runs asynchronously and it has not yet been set } func findCordiante(adress:String, completionHandler: @escaping (String?) -> Void) { let geocoder = CLGeocoder() geocoder.geocodeAddressString(adress) { placemarks, error in if let location = placemarks?.first?.location, location.horizontalAccuracy >= 0 { completionHandler("\(location.coordinate.latitude), \(location.coordinate.longitude)") } else { completionHandler(nil) } } } 生成一个应该是线性可分的测试数据集。问题是并非每个生成的数据集都是线性可分的。如何使用sklearn.datasets.make_classification生成线性可分的数据集?我的代码如下:

sklearn.datasets.make_classification

2 个答案:

答案 0 :(得分:1)

没有“线性可分离”选项,但您可以在数据集不可线性分离时拒绝它,并生成另一个数据集。像这样:

separable = False
while not separable:
    samples = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=1, n_clusters_per_class=1, flip_y=-1)
    red = samples[0][samples[1] == 0]
    blue = samples[0][samples[1] == 1]
    separable = any([red[:, k].max() < blue[:, k].min() or red[:, k].min() > blue[:, k].max() for k in range(2)])
plt.plot(red[:, 0], red[:, 1], 'r.')
plt.plot(blue[:, 0], blue[:, 1], 'b.')
plt.show()

sets

这只测试垂直或水平分离,但无论如何,这些都是您希望在设置中发生的。

此外,增加class_sep参数会使分离更容易发生。

答案 1 :(得分:0)

我相信问题已得到解答,但还有一个有趣的选择datasets.make_blobs。请查看代码:

import matplotlib.pyplot as plt
from sklearn import datasets

X, y = datasets.make_blobs(n_samples=100, centers=2, n_features=2, center_box=(0, 10))
plt.plot(X[:, 0][y == 0], X[:, 1][y == 0], 'g^')
plt.plot(X[:, 0][y == 1], X[:, 1][y == 1], 'bs')
plt.show()