scikit-learn库实现了一系列的数据挖掘,提供通用的编程接口、标准化的测试和调参工具
主要包含:
估计器:用于聚类、回归、分类分析
转化器:用于数据的预处理和数据抓换
流水线:组合数据挖掘的流程,便于再次使用
估计器:为了实现大量的分类算法,该库把相关功能封装成所谓的估计器,主要包括两个函数:
fit():训练算法,设置内部参数。接受训练集和类别这两个参数
predict():参数为测试集,预测测试机的类别,并且返回一个测试集识别后级别的数组
大多scikit-learn库接受和输出的数据格式都为numpy 的数组格式
scikit-learn库提供了很多估计器,例如随机森林,svm,神经网络
近邻算法:
距离测度方法:
欧式距离:两个特征响亮的长度平方和的平方根
曼哈顿距离
余弦距离
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 2 21:43:06 2017
@author: zzpp220
"""
from pandas import DataFrame,Series
import pandas as pd
import numpy as np
import os,csv
from sklearn.cross_validation import train_test_split
from sklearn.cross_validation import cross_val_score#交叉验证
from matplotlib import pyplot as plt
data_folder='/media/zzpp220/Data/Linux_Documents/DOWNLOAD/python-DataAnalysis/xianku_book'
data=os.path.join(data_folder,'ionosphere.data')#csv --comma-seperated-values
X=np.zeros((351,34),dtype='float')
y=np.zeros((351,),dtype='bool')
with open(data,'r') as input:
reader=csv.reader(input)
# X=np.array([])
for i ,row in enumerate(reader):
data=[float(datum) for datum in row[:-1]]
X[i]=data#读数据至数组X
y[i]=row[-1]=='g'#读类别值数组y
## set train_set and test_set
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=14)
##导入k近邻分类器,并为其初始化一个实例,参数用默认的,以后再讲调参,该算法默认选择5个近邻作为分类一句
from sklearn.neighbors import KNeighborsClassifier
estimator=KNeighborsClassifier()# 建立实例
#估计器创建号之后,就要用进行数据训练,
#k近邻估计器分析训练集中 的数据,比较待分类的新数据点和训练集中的数据,找到新数据点的 近邻
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=cross_val_score(estimator,X,y,scoring='accuracy')
average_accuracy=np.mean(scores)*100
print 'the accuracy is {0:.1f}%'.format(average_accuracy)
##调参优化结果
#k近邻算法有多个参数,最终药店 是初始紧邻点的选择,想测试一系列的紧邻点的值,可以进行多次实验
avg_Scores,all_score=[],[]
parameter_values=range(1,21)
for num_neighbor in parameter_values:
multi_test_estimator=KNeighborsClassifier(n_neighbors=num_neighbor)
multi_testscore=cross_val_score(multi_test_estimator,X,y,scoring='accuracy')
all_score.append(multi_testscore)
avg_Scores.append(np.mean(multi_testscore))
plt.plot(parameter_values,avg_Scores,'-o')#画图,横坐标,纵坐标,点的标志
plt.savefig('knn-multi-neighbor-test.pdf',dpi=400,bbox_inchs='tight')#保存成pdf格式,后面是像素和白边的设置
附件列表