机器学习小组第一周:机器学习的敲门砖kNN算法

20200224
因为今年的寒假实在太长,今天本来应该是开学的第一天,此时却只能在家里自主学习,学校正式线上授课的日子是3月9号,所以报名了一个机器学习小组一起学习机器学习算法的原理和实现啦。

学习目标

1.了解kNN算法的思想及其原理
2.使用python手动实现kNN算法,并在sklearn中调用kNN算法
3.了解监督学习和非监督学习的概念

学习资料

1.阅读《机器学习的敲门砖:kNN算法》全文,理解算法思想及其原理,并尝试实现文中代码。
给出文章链接:link
2.西瓜书p225,介绍了kNN算法的相关内容。
3.推荐一篇网络上比较好的博文帮助理解。
给出文章链接:link

以及其他资料等

学习要求

每人每周输出一(多)篇笔记,内容为知识点总结、实践代码或者是案例分析。


监督学习和非监督学习

根据训练数据是否拥有标记信息,学习任务大致可划分为两大类:

监督学习 :(supervised learning)代表为分类和回归,即对于保险公司的风险控制部门,已知既往的客户信用数据集,通过分析客户个人数据等找出其和是否存在违约行为的关系。这种已知Y的结果的学习即为监督学习,通过训练找出特征和标签之间的联系。
非监督学习 :(unsupervised learning)代表为聚类,同样运用上面的例子,对于一个全新的公司,拿到一批新客户的数据,这些客户还没有发生违约或终止保险的行为,通过对客户特征的分析,从而找到对于Y的结果预测的可能性。这种未知Y的结果的学习即为非监督学习。


20200225
kNN(k-Nearest Neighbour),k最近邻算法,既可以用来做分类问题也可以用来做回归问题,准确度高,对异常点不敏感。算法思想可以简单理解为“找邻居+投票”,使用的模型,实际上是特征空间的划分。
kNN算法流程:
1.计算测试对象(即测试集中的某一个新数据)到训练集(已知特征)中每个对象的距离
2.按照距离的远近排序(一般是欧氏距离)
3.选取与当前测试对象最近的k个训练对象,作为该测试对象的“邻居”
4.统计k个邻居的类别频次
5.其中频次最高的类别,即为测试对象通过kNN预测出的类别


20200229
没想到周三来了个ddl,这几天一直在搞导师的任务,下周之前把kNN相关的东西再补充一下。先简单放一下代码。

from sklearn.neighbors import KNeighborsClassifier

# 建立模型
kNN_classifier = KNeighborsClassifier(n_neighbors = 6)

# 拟合训练集
kNN_classifier.fit(X_train, y_train)

# 用模型预测,需要传入一个矩阵
# reshape()成一个二维数组,第一个参数是1表示只有一个数据,第二个参数-1,numpy自动决定第二维度有多少
x = np.array(x)
y_predict = kNN_classifier.predict(x.reshape(1, -1))
print(y_predict)
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

# 读取数据 X, y
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 把数据分成训练数据和测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=20)
# 构建KNN模型, K值为3、 并做训练
clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)
# 计算准确率
from sklearn.metrics import accuracy_score
correct = np.count_nonzero((clf.predict(X_test)==y_test)==True)
#accuracy_score(y_test, clf.predict(X_test))
print ("Accuracy is: %.3f" %(correct/len(X_test)))
发布了24 篇原创文章 · 获赞 0 · 访问量 321

猜你喜欢

转载自blog.csdn.net/Helslie/article/details/104475888