用python写一个线性可分与不可分代码
时间: 2024-01-24 13:16:51 浏览: 55
线性可分代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成线性可分数据
np.random.seed(0)
X = np.random.randn(200, 2)
y = np.array([1 if np.sum(x) > 0 else -1 for x in X])
# 绘制数据散点图
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()
```
不可分代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成线性不可分数据
np.random.seed(0)
X = np.random.randn(200, 2)
y = np.array([1 if np.sum(x**2) < 1 else -1 for x in X])
# 绘制数据散点图
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()
```
在这个例子中,我们生成了一组二维数据,但是这些数据不是线性可分的。我们通过判断每个数据点是否在以原点为中心,半径为1的圆内来决定它们的标签。可以看到,这些数据点在散点图上并没有明显的分界线,因此无法用线性分类器对它们进行分类。
相关问题
Python生成两组线性均匀分布的数据(完全线性可分)。 生成两组线性均匀分布的数据(线性不可分)。 生成两组高斯分布的数据(完全线性可分)。 生成两组高斯分布的数据(线性不可分)使用 K-means聚类程序进行二分类。
好的,我来逐一回答你提出的问题。
1. Python生成两组线性均匀分布的数据(完全线性可分):
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成线性可分的数据
mean1 = [0, 0]
mean2 = [2, 2]
cov = [[1, 0], [0, 1]]
x1, y1 = np.random.multivariate_normal(mean1, cov, 100).T
x2, y2 = np.random.multivariate_normal(mean2, cov, 100).T
plt.scatter(x1, y1, c='r')
plt.scatter(x2, y2, c='b')
plt.show()
```
2. Python生成两组线性均匀分布的数据(线性不可分):
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成线性不可分的数据
mean1 = [0, 0]
mean2 = [2, 2]
cov = [[1, 0.8], [0.8, 1]]
x1, y1 = np.random.multivariate_normal(mean1, cov, 100).T
x2, y2 = np.random.multivariate_normal(mean2, cov, 100).T
plt.scatter(x1, y1, c='r')
plt.scatter(x2, y2, c='b')
plt.show()
```
3. Python生成两组高斯分布的数据(完全线性可分):
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成高斯分布的数据
mean1 = [0, 0]
mean2 = [2, 2]
cov = [[1, 0], [0, 1]]
x1, y1 = np.random.multivariate_normal(mean1, cov, 100).T
x2, y2 = np.random.multivariate_normal(mean2, cov, 100).T
plt.scatter(x1, y1, c='r')
plt.scatter(x2, y2, c='b')
plt.show()
```
4. Python生成两组高斯分布的数据(线性不可分):
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成高斯分布的数据
mean1 = [0, 0]
mean2 = [2, 2]
cov = [[1, 0.8], [0.8, 1]]
x1, y1 = np.random.multivariate_normal(mean1, cov, 100).T
x2, y2 = np.random.multivariate_normal(mean2, cov, 100).T
plt.scatter(x1, y1, c='r')
plt.scatter(x2, y2, c='b')
plt.show()
```
5. 使用K-means聚类程序进行二分类:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 生成高斯分布的数据
mean1 = [0, 0]
mean2 = [2, 2]
cov = [[1, 0.8], [0.8, 1]]
x1, y1 = np.random.multivariate_normal(mean1, cov, 100).T
x2, y2 = np.random.multivariate_normal(mean2, cov, 100).T
# 合并数据
X = np.concatenate((np.array([x1, y1]).T, np.array([x2, y2]).T))
# 进行二分类
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
labels = kmeans.labels_
# 绘制结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.show()
```
希望这些代码能够帮助到你解决问题!
python生成线性可分数据集
你可以使用Python中的`sklearn.datasets`库来生成线性可分数据集。具体来说,你可以使用`make_classification`函数来生成一个具有两个类别的线性可分数据集。以下是一个简单的示例代码:
```python
from sklearn.datasets import make_classification
# 生成一个线性可分的二元分类数据集
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=42)
# 可视化数据集
import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
```
在这个例子中, `n_samples`表示生成的样本数,`n_features`表示特征数,`n_informative`表示有用特征数(即线性关系的特征数),`n_redundant`表示冗余特征数(即不相关的特征数),`n_clusters_per_class`表示每个类别内部的簇数。
阅读全文