您的位置:首页 > 编程语言 > Python开发

《python数据挖掘入门与实践》笔记2

2017-03-14 16:28 711 查看
这一章的主要内容是使用scikit-learn估计器来实现分类,实现的算法是KN近邻算法。

近邻算法可能是标准数据挖掘算法中最为直观的一种。为了对新个体进行分类,它查找训练集,找到与新个体最相似的那些个体,看看这些个体大多属于哪个类别,就把新个体分到哪个类别。

import os
import numpy as np
import csv
#文档的格式为csv格式,所以需要导入csv的库。下面会用到来读取数据
data_filename="ionosphere.txt"

#申请数组用于储存数据和分类情况
X=np.zeros((351,34),dtype='float')
Y=np.zeros((351,),dtype='bool')

#with open() as . 用法:
#with open('t1.txt','r') as input1,open('t2.txt','r') as input2.
#data1=input1.readlines()

with open(data_filename,'r') as input_file:
reader=csv.reader(input_file)

#enumerate(). 枚举,遍历.

for i,row in enumerate(reader):
data=[float(datum) for datum in row[:-1]]
X[i]=data
Y[i]=row[-1]=='g'

#将数据分为两个集合,训练集和测试集。
from sklearn.cross_validation import train_test_split
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,random_state=14)
from sklearn.neighbors import KNeighborsClassifier

#用训练数据来训练估计器。

estimator=KNeighborsClassifier()
estimator.fit(X_train,Y_train)
y_predicted=estimator.predict(X_test)
accuracy=np.mean(Y_test==y_predicted)*100
print("The accuracy is {0:.1f}%".format(accuracy))

#上述方法只将数据分为两类,分类的结果可能是由于随机性因素造成的,下面导入一个交叉训练的库,用这个库对数据集多次分类,然后求得的分类准确度存在scores元组中, 再求平均值。

from sklearn.cross_validation import cross_val_score
scores=cross_val_score(estimator,X,Y,scoring='accuracy')
average_accuracy=np.mean(scores)*100
print("The average accuracy is {0:.1f}%".format(average_accuracy))

#在实际的KN近邻算法中,我们对近邻的N是可以随着需要调整的。 下面看看不同的参数对于精确度的影响。

avg_scores = []
all_scores = []
parameter_values = list(range(1, 21))
for n_neighbors in parameter_values:
estimator = KNeighborsClassifier(n_neighbors=n_neighbors)
scores = cross_val_score(estimator, X, Y, scoring='accuracy')
avg_scores.append(np.mean(scores))
all_scores.append(scores)

from matplotlib import pyplot as plt
plt.plot(parameter_values,avg_scores, '-o')![这里写图片描述](https://img-blog.csdn.net/20170314162854392?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvam9rZXJ0b255/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: