sklearn在KNN算法中的应用模块
1.sklearn.neighbors.NearestNeighbors(n_neighbors=5,radius=1.0,algorithm='auto',leaf_size=30,
metric='minkowski',p=2,metric_params=None,n_jobs=1,**kwargs)
功能:相当于对一种分类方法进行配置
参数:
n_neighbors:int,默认为5,对输入数据进行投票的训练数据个数,即k的大小
radius:float,默认1.0;radius_neighbors查询时默认的参数空间范围,即半径。给定目标点及半径r,在目标点为圆心,r为半径的圆中的点距目标点更近
algorithm:{'auto','ball_tree','kd_tree','brute'}计算最近邻使用的算法,输入为稀疏表示时会强制使用brute
leaf_size:int,默认30,BallTree或KDTree的叶节点数,即子区域个数。会影响树结构建立和查询的速度以及耗费的内存。
metric:string或函数调用,默认'minkowsik'。计算距离的方式。可以使用scikit-learn或者scipy.spatial.distance定义个任意方式.
p:int,默认2,minkowski的参数。p=1时为曼哈顿距离,p=2为欧式距离。
minkowski的参数。p=1时为曼哈顿距离,p=2为欧式距离。
metric_params:字典,默认None。对metric的追加参数
n_jobs:int ,默认1,并行计算的工作数,即CPU的占用个数
2.sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,weights='uniform',algorithm='auto',leaf_size=30,
p=2,metric='minkowski',metric_params=None,n_jobs=1,**kwargs)
功能:
参数:
weights:str 或者callable,默认'uniform','uniform':所有数据点权值一样。'distance':根据距离确定权值,越近权值越大,对数据点的结果影响越大;[callable]:用户定义的计算权值的函数;
其他参数跟NearestNeighbors中一样
3.sklearn.neighbors.KneighborsRegressor(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30,
p=2, metric=’minkowski’, metric_params=None, n_jobs=1, **kwargs)
功能:预测回归问题,根据k个最近邻点及其对应的权值求均值作为测试数据的目标值用法同上。
4.kneighbors(X=None,n_neighbors=None,return_distance=True)
功能:寻找点的k个最近邻
返回:
dist:array,表示目标点到k个最近邻的距离矩阵
ind:array,表示k个最近邻的索引值矩阵
参数:
X:测试集
n_neighbors:临近测试集的个数
return_distance:是否返回距离
example:
from sklearn.neighbors import NearestNeighbors
nn = NearestNeighbors(algorithm='kd_tree')
train = np.array([[2,3],[5,4],[9,6],[4,7],[8,1],[7,2]])
nn.fit(train)
dist,ind = nn.kneighbors(X=[[1,3],[5,5]],n_neighbors=2)
print(dist)
#[[1. 4.12310563]
# [1. 2.23606798]]
print(ind)
#[[0 1]
# [1 3]]
5.fit(X,y):
X:{array-like, sparse matrix, BallTree, KDTree}.训练数据
y : {array-like, sparse matrix}.对应的目标值
6.predict(X): 预测输入数据的类别。 X:array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’ y:array of shape [n_samples] or [n_samples, n_outputs]预测结果
7.predict_proba(X): 返回预测结果的概率 X:array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’ y:array of shape [n_samples, n_classes]预测结果的概率
8.score(X,y,sample_weight=None): 计算平均正确率
9. sklearn.model_selection.train_test_split(train_data,train_target,test_size=0.4, random_state=0)随机划分训练集和测试集
参数:
train_data:所要划分的样本特征集
train_target:所要划分的样本结果
test_size:样本占比,如果是整数的话就是样本的数量
random_state:是随机数的种子。
随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。
10.sklearn.model_selection.cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’)
功能:交叉检验,相当于predict分数
返回:交叉验证每次运行的评分数组
参数:
estimator:数据对象
X:数据
y:预测数据
soring:调用的方法
cv:交叉验证生成器或可迭代的次数
n_jobs:同时工作的cpu个数(-1代表全部)
verbose:详细程度
fit_params:传递给估计器的拟合方法的参数
pre_dispatch:控制并行执行期间调度的作业数量。减少这个数量对于避免在CPU发送更多作业时CPU内存消耗的扩大是有用的。
scikit-learn估计器分类例程:
1 import numpy as np 2 import csv 3 import os 4 home_folder = os.path.expanduser("~") 5 data_folder = os.path.join(home_folder, "Data", "Ionosphere") 6 data_filename = os.path.join(data_folder, "Ionosphere.data") 7 x = np.zeros((351, 34), dtype = 'float') #定义一个(351,34)来存储数据 8 y = np.zeros((351,), dtype = 'bool') #定义一个(351,1)来存储特征 9 with open (data_filename, 'r') as input_file: #读取文件 10 reader = csv.reader(input_file) #大部分数据都是使用csv格式存储,用csv模块来导入数据集文件 11 for i, row in enumerate(reader): 12 data = [float (datum) for datum in row[:-1]] #将前34个数值变为float类型 13 x[i] = data #将前34个数据存储到x数组中 14 y[i] = row [-1] == 'g' #将第后一个数存储到y数组中,如果类型为'g',值为1
1 from sklearn.model_selection import train_test_split 2 x_train, x_test, y_train, y_test = train_test_split(x,y,random_state = 14)#随机分配训练集和测试集 3 print("There are {} samples in train dataset" .format(x_train.shape[0])) 4 print("There are {} samples in test dataset" .format(x_test.shape[0]))
1 from sklearn.neighbors import KNeighborsClassifier 2 estimator = KNeighborsClassifier() 3 estimator.fit(x_train, y_train) #K近邻估计器分析训练集中的数据 4 y_predicted = estimator.predict(x_test) 5 accuracy = np.mean(y_test == y_predicted)*100 6 print("The accuracy is {0:.1f}%".format(accuracy)) 7 #交叉验证 8 from sklearn.model_selection import cross_val_score#默认使用Stratified K Fold 方法切分数据集,大体上保证切分后得到的子数据集中类别分布相同 9 scores = cross_val_score(estimator, x, y, scoring = 'accuracy') 10 average_accuracy = np.mean(scores) *100 11 print("The accuracy is {0:.1f}%".format(average_accuracy)) 12 avg_scores = [] 13 all_scores = [] 14 parameter_values = list(range(1,21)) 15 for n_neighbors in parameter_value: 16 estimator = KNeighborsClassifier(n_neighbors = n_neighbors) 17 scores = cross_val_score(estimator, x, y, scoring = 'accuracy') 18 avg_scores.append(np.mean(scores)) 19 all_scores.append(scores)#吧不同的n_neighbors的得分和平均分保存起来 20 21 %matplotlib inline 22 from matplotlib import pyplot as plt 23 plt.plot(parameter_values,avg_scores, '-o' )

浙公网安备 33010602011771号