千家信息网

什么是KNN算法及对新闻分类示例分析

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,今天就跟大家聊聊有关什么是KNN算法及对新闻分类示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 什么是KNN算法KNN的全称是(K
千家信息网最后更新 2025年01月24日什么是KNN算法及对新闻分类示例分析

今天就跟大家聊聊有关什么是KNN算法及对新闻分类示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1. 什么是KNN算法

KNN的全称是(K Nearest Neighbors) K最邻算法,意思是K个最近的邻居。是最简单的分类算法之一。 KNN是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

算法流程
对每一个未知点执行:

  1. 计算未知点到所有已知类别点的距离

  2. 按距离排序(升序)

  3. 选取其中前k个与未知点离得最近的点

  4. 统计k个点中各个类别的个数

  5. 上述k个点里类别出现频率最高的作为未知点的类别

优缺点

  1. 优点:
    简单有效、易理解

  2. 缺点:
    k近邻需要保存全部数据集,因此对内存消耗大,当数据集较大时对设备要求非常高;
    需要计算每个未知点到全部已知点的距离,可能会很耗时;
    分类结果不易理解

2.示例

根据新闻文本判断进行分类,如是科技新闻还是体育新闻等。

训练数据样表类型:

# -*- coding: utf-8 -*-import pandas as pdimport matplotlib.pyplot as pltimport matplotlibimport jiebafrom sklearn.feature_extraction.text import CountVectorizerfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import confusion_matriximport seaborn as sns####1.解决中文乱码问题#指定默认字体  matplotlib.rcParams['font.sans-serif'] = ['SimHei']   matplotlib.rcParams['font.family']='sans-serif'  #解决负号'-'显示为方块的问题  matplotlib.rcParams['axes.unicode_minus'] = False###2 。导入数据raw_train = pd.read_csv("./train_sample_utf8.csv",encoding="utf-8")raw_test = pd.read_csv("./test_sample_utf8.csv",encoding="utf8")### 3. 查看数据print(raw_train.head(5))print(raw_train.shape)print(raw_test.shape)####4. 对数据进行分类图表显示##plt.figure(figsize=(15, 8))##plt.subplot(1, 2, 1)  ####要生成一行两列,这是第一个图plt.subplot('行','列','编号')##raw_train["分类"].value_counts().sort_index().plot(kind="barh",title='训练集新闻主题分布')##plt.subplot(1, 2, 2)##raw_test["分类"].value_counts().sort_index().plot(kind="barh",title='测试集新闻主题分布')####5. 定义 对文章进行分词函数def news_cut(text):    return " ".join(list(jieba.cut(text)))#简单测试下分词效果#test_content = "六月初的一天,来自深圳的中国旅游团游客纷纷拿起相机拍摄新奇刺激的好莱坞环球影城主题公园场景。"##print(news_cut(test_content))    ###6. 利用封装的分词函数,对训练集和测试集中的新闻内容进行分词处理raw_train["分词文章"] = raw_train["文章"].map(news_cut)raw_test["分词文章"] = raw_test["文章"].map(news_cut)###查看数据print(raw_train.head(5))####7. 加载停用词stop_words = []file = open("./stopwords.txt",encoding="utf-8") for line in file:    stop_words.append(line.strip())file.close()####8.利用CountVectorizer统计词出现频率,并转为向量vectorizer = CountVectorizer(stop_words=stop_words)X_train = vectorizer.fit_transform(raw_train["分词文章"])X_test = vectorizer.transform(raw_test["分词文章"])#####9. 利用knn算法进行预测 knn = KNeighborsClassifier(n_neighbors=10,weights="distance")knn.fit(X_train, raw_train["分类"])Y_test = knn.predict(X_test)##将真实测试值 与预测图较,并绘制热力图展示 ax = sns.heatmap(confusion_matrix(raw_test["分类"].values,Y_test),linewidths=.5,cmap="Greens",                 annot=True, fmt='d',xticklabels=knn.classes_, yticklabels=knn.classes_)ax.set_ylabel('真实')ax.set_xlabel('预测')ax.xaxis.set_label_position('top') ax.xaxis.tick_top()ax.set_title('混淆矩阵热力图')

看完上述内容,你们对什么是KNN算法及对新闻分类示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0