学习笔记-机器学习

学习笔记——机器学习(七)

2018-11-03  本文已影响0人  吉林天师

申明一下,只是学习笔记,只是学习笔记,只是学习笔记。


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

上一篇下一篇

猜你喜欢

热点阅读