机器学习knn算法

KNN算法很早就写过了,但是一直耿耿于怀,今天特以此篇来终结这个算法因为不止一个同学跟我说KNN算法速度没那么慢,但是我自己写的代码跑一遍要用将近一个小时的时间。不知道是算法问题,还是电脑机器的问题。我的电脑是ThinkPad i5处理器,4G内存。这个代码是网上的,跑一遍用了1个半小时的时间。还在这个代码层次还是比较清晰的,所以手撸代码部分就用这个吧。 在这个代码里用了很多预处理,如下: 以下
摘要由CSDN通过智能技术生成

KNN算法很早就写过了,但是一直耿耿于怀,今天特以此篇来终结这个算法

因为不止一个同学跟我说KNN算法速度没那么慢,但是我自己写的代码跑一遍要用将近一个小时的时间。不知道是算法问题,还是电脑机器的问题。我的电脑是ThinkPad i5处理器,4G内存。这个代码是网上的,跑一遍用了1个半小时的时间。还在这个代码层次还是比较清晰的,所以手撸代码部分就用这个吧。
在这个代码里用了很多预处理,如下:
以下代码是把源文件里的文字一行一个字地写到新的问价夹里面
其中在处理源文件的时候,有一段代码确实做的非常好,他用了词干提取的方法,这种方法在以后处理英文文本的时候,确实可以用来借鉴,代码如下

def lineProcess(line):
stopwords = nltk.corpus.stopwords.words(‘english’) #去停用词
porter = nltk.PorterStemmer() #词干分析
splitter = re.compile(‘[^a-zA-Z]’) #去除非字母字符,形成分隔
words = [porter.stem(word.lower()) for word in splitter.split(line)\
if len(word)>0 and\
word.lower() not in stopwords]
return words
以上代码用正则匹配方法,去除非字幕符号,形成分隔,然后把字母统一转化为小写,同时查看字母是否在stopwords,这一套下来,基本就是对英文文本的标准预处理方法。

def createFiles():
srcFilesList = listdir(originalSample)
for i in range(len(srcFilesList)):
if i==0: continue
dataFilesDir = originalSample + ‘\’+ srcFilesList[i] # 20个文件夹每个的路径
dataFilesList = listdir(dataFilesDir)
targetDir = r’processedSample_includeNotSpecial’+’\’ + srcFilesList[i] # 20个新文件夹每个的路径
if path.exists(targetDir)==False:
mkdir(targetDir)
else:
print (‘%s exists’ % targetDir)
for j in range(len(dataFilesList)):
createProcessFile(srcFilesList[i],dataFilesList[j]) # 调用createProcessFile()在新文档中处理文本
print (‘%s %s’ % (srcFilesList[i],dataFilesList[j]))
def createProcessFile(srcFilesName,dataFilesName):
srcFile = originalSample + ‘\’ + srcFilesName + ‘\’ + dataFilesName
targetFile= ‘processedSample_includeNotSpecial\’ + srcFilesName\
+ ‘\’ + dataFilesName
fw = open(targetFile,’w’)
dataList = []
try:
dataList = open(srcFile).readlines()
except:
print(‘error occur’)
for line in dataList:
resLine = lineProcess(line) # 调用lineProcess()处理每行文本
for word in resLine:
fw.write(‘%s\n’ % word) #一行一个单词
fw.close()

以下就是特征提取

def filterSpecialWords():
fileDir = ‘processedSample_includeNotSpecial’
wordMapDict = {}
sortedWordMap = countWords()
for i in range(len(sortedWordMap)):
wordMapDict[sortedWordMap[i][0]]=sortedWordMap[i]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值