申明一下,只是学习笔记,只是学习笔记,只是学习笔记。
K-近邻算法(又叫knn算法)
第一点——用途:1.解决分类问题;2.解决回归问题
第二点——原理:核心思想【未标记样本的类别,由距离其最近的k个邻居投票来决定】
第三点——优点【准确性高,对异常值和噪声有较高的容忍度】缺点计算量大,对内存的需求较大
第四点——算法参数k,由数据来决定。k越大,模型偏差越大,对噪声数据越不敏感。k很大,会模型欠拟合;k越小,模型的方差就会越大,k很小,会模型过拟合
第五点——算法变种 第一种,为邻居增加权重(默认的,权重是相同的,针对不同的邻居指定不同的权重,距离越近,权重越高)第二种,使用一定半径内的点取代距离最近的k个点(就是RadiusNeighborsClassifier)数据采样不均匀时,比较好
第六点——用例
第一例:使用k-近邻算法进行分类
第一步:生成已标记数据集
1.导入库文件
from sklern.datasets.samples_genrator impot make_blobs
2.以center参数指定中心范围,以标准差cluster_std指明生成的点分布的松散程度,以X来存放生成的训练数据集,以y存放数据集的类别
centers = [ [ -2, 2 ], [ 2, 2 ], [ 0, 4 ] ]
X, y = make_blobs (n_samples = 60, centers = centers, random_state = 0, cluster_std = 0.6 )
3.打印出来看一下
plt.figure ( figsize = ( 16, 10 ), dpi = 144 )
c = np.array ( centers )
plt.scatter( X[:, 0], X[:, 1], c=y, s=100,cmap=‘cool’);
plt.scatter(c[:, 0],[:, 1], s=100,marker =‘^’,c=‘orange’
第二步,模型训练———(kneighborsClassfier)k=5这就是k近邻算法中的k值
1.导入库文件
from sklearn.neighbors import KNeighborsClassfier
k=5
clf = KNeighbosClassifier(n_neighbors=k)
clf.fit(X,y);
第三步,对一个新样本预测
X_sample = [0, 2]
y_sample = clf.predict(X_sample);
neighbors = clf.kneighbors(X_sample,return_distance=False
第四步,把待预测的样本和最近的五个点标记出来
1.画出样本和中心点:复制第一步,第三点的代码
2.画出待预测的点:plt.scatter(X_sample[0], X_sample[1], marker=‘x’, c=y_sample, s=100,cmap=‘cool’)
3.画出预测点与距离最近的5个样本的连线
for i in neighbors[0]:
plt.plot[X[i][0], X_sample[0]],[X[i][1], X_sample[1], ‘k- -‘,linewidth = 0.6
第二例:使用k-近邻算法进行回归拟合
第一步:生成数据集,并在余弦曲线的基础上加入噪声
import numpy as np
n_dots = 40
X = 5 * np.random.rand( n_dots, 1)
y = np.cos(X).ravel()
y += 0.2*np.random.rand(n_dots) - 0.1
第二步:用KNeighborsRegressor 训练模型
from sklearn.neighbors import KNeighborsRegressor
k=5
knn = KNeighborsRegressor(k)
knn.fit(X,y);
“怎么样来进行回归拟合呢”——在X轴指定区间内生成足够多的点,针对这些足够密集的点,使用训练出来的模型进行预测,得到预测值y_pred,然后在坐标轴上把所有的预测点连接起来,这样就发出来了,拟合曲线
第三步:生成足够密集的点,并进行预测
T = np.linespace(0,5,500)[:,np.newaxis]
y_pred = knn.predict(T)
knn.score(X,y)
结果
第四步:把预测点用线连 = 拟合曲线
plt.figure(figsize =(16,10),dpi = 144)
plt.scatter(X, y, c=‘g’,label = ‘data’, s= 100)
plt.plot(T, y_pred, c=‘k’, label=‘ predictions’, lw=4)
plt.axis(‘tight’)
plt.titlte(“k-曲线”)
plt.show()
第七点———如何提升算法的用法效率
第一个方法:K-D Tree数据结构,来自论文《Betley,J.L.,communications off for the ACM》
第二个方法:Ball-Tree 的算法。《Fire Ball treeconstructions the algorithms》
相关性测试:假设检验问题-(判断结论是否成立和成立的概率问题。
随机采样的数据原假设:程序员和性别无关
问题:通过图中数据,检验原假设是否成立的概率有多高?
卡方检验(chi-squared test)他的计算公式
卡方检测公式解释一下
x^2 — 卡方检验值
Oi —— 观测值 Ei 期望值
针对途中数据,假设成立,男程序员数量
( 14 / 489 )* 242 = 6.928
女程序员数量 ( 14 / 489 )* 247 = 7.072
同样,非程序员男女期望数量分别是:235.072,237.928
卡方公式计算的卡方值X^2=7.67
1.怎么计算卡方值(每一个观测值减去对应期望值的平方除以对应的期望值,将这个计算结果加起来,就是卡方值)
2.怎么判断原假设成立的概率?引出两个,自由度【自由度 = (行数r - 1 )*(列数c - 1),卡方分布(若n个相互独立的随机变量均服从正态分布,则这n个随机变量的平方和构成的新随机变量,其分布)
查表得出,自由度为1的卡方分布,99%的卡方值为6.63。因为7.67大于6.63,所以有99%的把握推翻原假设。
如果原假设成立,那么程序员与性别无关,我们采样到的数据出现的概率将低于1%。
卡方值的大小反应变量与目标值的相关性。值越大相关性越大,值越小,相关性越小。
K值最佳选择函数,可以计算不同特征的卡方值,来判断特征与输出值的相关性性。从而完成特征选择
卡方值计算函数:sklearn.feature_selection.chi2()
F值计算函数sklearn.feature_selection.f_classif
网友评论