KNN算法实操 任务一 导入相关依赖库 sklearn.neighbors 、 numpy 、 matplotlib.pyplot 任务二 准备数据集 定义6个数据点并设置两种标签‘A’和‘B’ 输入: # 准备数据集: 准备输入数据:dataset; 准备输出数据: label; def createDataset(): dataset = np.**([[1,1],[1,1.5],[2,2.5],[2.5,3],[1.5,1],[3,2.5]]) #将输入数据标记为两类 label = ['A','A','B','B','A','B'] plt.scatter(**,**) plt.show() return dataset,label 打印结果内容略 结果显示如下,六个样本点被可视化于图中,可以发现六个点可被分为两个族群。A:[1,1],[1,1.5],[1.5,1];B:[2,2.5],[1.5,1],[3,2.5]。且两类样本分隔较为明显。 任务三 计算距离并进行分类 计算样本和数据集中所有已知标签样本的欧氏距离并排序进行投票。
时间: 2023-03-02 08:47:33 浏览: 75
任务一:
KNN算法需要导入相关依赖库sklearn.neighbors、numpy、matplotlib.pyplot。其中sklearn.neighbors是用于实现KNN算法,numpy是用于处理数值计算,matplotlib.pyplot是用于绘制数据图表的库。
任务二:
准备数据集需要定义6个数据点并设置两种标签‘A’和‘B’。数据点可以用一个numpy数组来表示,其中每行表示一个数据点的坐标,标签可以用一个列表来表示,其中每个元素对应一个数据点的标签。代码如下所示:
```
import numpy as np
# 定义6个数据点
data = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]])
# 设置标签
labels = ['A', 'A', 'B', 'B', 'A', 'B']
```
其中,第一个数据点的坐标为(1, 2),标签为'A';第二个数据点的坐标为(2, 3),标签为'A';依此类推。
相关问题
import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib import rcParams import seaborn as sns import warnings from sklearn.neighbors import KNeighborsClassifier包含的库函数
这段代码包含了以下库函数:
1. numpy:用于科学计算,支持数组和矩阵运算;
2. pandas:用于数据处理和分析,可以用来进行数据的读取、清洗、转换等操作;
3. matplotlib:用于绘制2D图表和图形界面;
4. seaborn:基于matplotlib的可视化库,提供更高级的图表和样式;
5. sklearn.neighbors:包含了KNN(K-Nearest Neighbors)分类器的实现,可以用于分类问题。
此外,还有一些辅助函数和参数,如:
1. plt:matplotlib的pyplot子模块,提供了更简便的API来绘制图表;
2. rcParams:matplotlib的默认参数设置,可以用来设置全局的绘图参数;
3. warnings:用于控制警告信息的输出。
现有1500个二维空间的数据点,请完成如下工作: (1).编写一个程序不调用sklearn.manifold ,实现ISOMAP降维度。
ISOMAP算法可以通过以下步骤实现降维:
1. 构建邻接矩阵:对于给定的数据集,计算任意两个数据点之间的欧氏距离,并选取距离最近的k个点作为其邻居。对于每个数据点,将其k个邻居之间的距离作为权值,构建邻接矩阵。
2. 计算最短路径:利用Floyd算法或Dijkstra算法计算任意两个数据点之间的最短路径。
3. 降维:将最短路径矩阵作为输入,利用MDS(多维尺度变换)或LLE(局部线性嵌入)等算法进行降维。
下面是一个简单的ISOMAP算法实现示例:
```python
import numpy as np
from scipy.spatial.distance import cdist
class ISOMAP:
def __init__(self, k_neighbors=5, n_components=2):
self.k_neighbors = k_neighbors
self.n_components = n_components
def fit_transform(self, X):
# 1. 构建邻接矩阵
D = cdist(X, X)
kNN_indices = np.argsort(D, axis=1)[:, 1:self.k_neighbors+1]
kNN_dists = np.array([D[i, kNN_indices[i]] for i in range(len(X))])
W = np.zeros((len(X), len(X)))
for i in range(len(X)):
for j in kNN_indices[i]:
W[i, j] = kNN_dists[i, j]
W[j, i] = kNN_dists[i, j]
# 2. 计算最短路径
D = np.zeros((len(X), len(X)))
for i in range(len(X)):
for j in range(len(X)):
if i != j:
D[i, j] = np.inf
for k in range(len(X)):
for i in range(len(X)):
for j in range(len(X)):
if D[i, k] + W[k, j] < D[i, j]:
D[i, j] = D[i, k] + W[k, j]
# 3. 降维
S = -0.5 * (D ** 2 - np.mean(D ** 2, axis=0) - np.mean(D ** 2, axis=1)[:, np.newaxis] + np.mean(D ** 2))
eigvals, eigvecs = np.linalg.eigh(S)
idx = np.argsort(eigvals)[::-1][:self.n_components]
return eigvecs[:, idx]
```
其中,参数k_neighbors表示选取每个数据点的k个最近邻居,参数n_components表示降维后的维度。可以通过调用ISOMAP对象的fit_transform方法来完成降维操作。例如:
```python
from sklearn.datasets import make_swiss_roll
import matplotlib.pyplot as plt
X, _ = make_swiss_roll(n_samples=1500, noise=0.05, random_state=0)
model = ISOMAP(k_neighbors=10, n_components=2)
X_iso = model.fit_transform(X)
plt.scatter(X_iso[:, 0], X_iso[:, 1], c=X[:, 1])
plt.show()
```
这里使用make_swiss_roll生成一个三维数据集,然后利用ISOMAP算法将其降到二维,并用散点图进行可视化。