今天就跟大家聊聊有关什么是KNN算法及对新闻分类示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
KNN的全称是(K Nearest Neighbors) K最邻算法,意思是K个最近的邻居。是最简单的分类算法之一。 KNN是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
算法流程
对每一个未知点执行:
计算未知点到所有已知类别点的距离
按距离排序(升序)
选取其中前k个与未知点离得最近的点
统计k个点中各个类别的个数
上述k个点里类别出现频率最高的作为未知点的类别
优缺点
优点:
简单有效、易理解
缺点:
k近邻需要保存全部数据集,因此对内存消耗大,当数据集较大时对设备要求非常高;
需要计算每个未知点到全部已知点的距离,可能会很耗时;
分类结果不易理解
根据新闻文本判断进行分类,如是科技新闻还是体育新闻等。
训练数据样表类型:
# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import jieba
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix
import 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算法及对新闻分类示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/pengchanghua/blog/4497741