数据分析与挖掘-KNN算法-1.分类算法

一、 数据

电影名称  打斗镜头  牵手镜头  类别
黄飞红    10     2  动作
泰坦尼克号     3     9  爱情
钢铁侠    12     3  动作
后会有期     4    10  爱情
星语心愿     1     9  爱情
武当山     9     2  动作
加勒比海海盗    11     3  动作
天下无贼    13     4  动作
流星花园     2     7  爱情
天之娇子     3    11  爱情
天线宝宝    13     2  动作

 

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier

matplotlib.use('TkAgg')

data = pd.read_excel('movies.xls')
# print(data)
# 数据预处理
y = data["类别"]
y = y.map({"动作": 0, "爱情": 1})
X = data[["打斗镜头", "牵手镜头"]]

# 数据集的拆分
X_train = X.iloc[:8]  # 训练集
y_train = y.iloc[:8]  # 训练集标签(结果)

X_test = X.iloc[8:]  # 测试集
y_test = y.iloc[8:]  # 测试集标签(结果)

# print(X_test)

# 构建模型
knn1 = KNeighborsClassifier(n_neighbors=3)
knn2 = KNeighborsClassifier(n_neighbors=7)

# 用训练样本集 训练模型
knn1.fit(X_train, y_train)
knn2.fit(X_train, y_train)

# 用测试样本集 测试模型 得到结果
y1_ = knn1.predict(X_test)
y2_ = knn2.predict(X_test)

#求出准确率
acc1 = (y1_ == y_test).sum() / y1_.size
acc2 =(y2_ == y_test).sum() / y1_.size

print(acc1)
print(acc2)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K-Nearest Neighbors (KNN) 算法是一种基于实例的学习方法,在数据挖掘中用于分类和回归分析。它的基本思想是:给定一个新样本,找到训练集中与其最相似的K个邻居(通常选择最近的),然后根据这些邻居的标签(对于分类)或属性值(对于回归)来决定新样本的预测结果。 KNN 算法的核心步骤包括: 1. 计算距离:通常是用欧氏距离或者其他相似度度量来计算样本间的距离。 2. 确定K值:选择一个合适的K值,通常是一个较小的整数。 3. 找到K个最近邻居:根据距离排序,选取前K个。 4. 预测:对于分类任务,多数投票决定;对于回归任务,取K个邻居的平均值。 然而,KNN 算法的一些缺点包括: - 计算复杂度高:对于大规模数据集,尤其是距离计算可能很耗时。 - 需要存储所有训练样本:内存需求大。 - 对于特征缩放敏感:不同的特征尺度会影响距离计算的结果。 针对这些局限,有一些改进算法: 1. **kd树**:使用空间划分技术来加速搜索过程,减少计算时间。 2. **Ball Tree**:类似kd树,但采用球形划分,适用于非均匀分布的数据。 3. **局部加权线性回归** (Local Weighted Linear Regression, LWR):只考虑邻域内的数据,对全局信息依赖较少。 4. **kd树+kd树** 或 **kd树+Ball Tree** 结合:利用两者的优点,同时提高效率和准确性。 5. **KNN 包围盒方法**:对每个训练样本建立一个包围盒,新样本只与包围盒内的点比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值