您的位置:首页 > 其它

《机器学习实战》学习笔记Part 1(一)

2018-01-18 12:45 155 查看
仅作记录,供自己日后翻阅和理解。

监督学习一般使用两种类型的目标变量:标称和数值型
标称型目标变量的结果只在有限目标集中取值(分类)
数值型目标变量可以从无限的数值集合中取值(主要用于回归)

第二章 K-近邻算法(KNN)
2.1 算法概述
简单地说,采用测量不同特征值之间的距离方法进行分类。
工作原理:存在一个样本数据集(训练样本集),并且样本集中每个数据都存在标签。输入没标签的新数据后,将新数据地每个特征与样本集中数据对应的特征进行比较,然后算法提取样本中特征最相似数据(最邻近)的分类标签。一般只取样本数据集中前k个最相似的数据(k一般不大于20)
步骤:收集数据——>准备数据——>分析数据——>测试算法——>使用算法
from numpy import *
#导入科学计算包
import operator
#运算符模块
import matplotlib
import matplotlib.pyplot as plt

#解决显示中文问题
#coding:utf-8
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

def createDataSet():
group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['A','A','B','B']
return group,labels

def test1():
group,label=createDataSet()
print(group)
print(label)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title("带四个数据点的简单例子")
ax.scatter(group[:,0], group[:, 1])
KNN伪代码:
1)计算已知类别数据集中的点和当前点之间的距离
2)按照距离递增次序排序
3)选取与当前点距离最小的k个点
4)确定前k个点所在类别的出现频率
5)返回前k个点出现频率最高的类别作为当前点的预测分类

from numpy import *
#导入科学计算包
import operator
#运算符模块
import matplotlib
import matplotlib.pyplot as plt

#解决显示中文问题
#coding:utf-8
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

def createDataSet():
group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['A','A','B','B']
return group,labels

# k-j近邻算法
def classify0(inX, dataSet, labels, k):
# inX是用于分类的输入向量;dataSet是输入的训练样本集,labels是标签向量,k是用于选择最近邻居的数目
#1 使用欧式距离,计算向量点之间的距离
dataSetSize = dataSet.shape[0] # 返回多维数组维度的第一维
diffMat = tile(inX, (dataSetSize,1)) - dataSet # title(x,(m,n))以x为基本单位生成一个m行,每行为n个x的多维数组
sqDiffMat = diffMat**2 # 平方
sqDistances = sqDiffMat.sum(axis=1) # 对数组按行求和
distances = sqDistances**0.5 # 开方
#1 计算距离结束
sortedDistIndicies = distances.argsort() # 按列排序,返回行标
classCount={} # 字典类型
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 # 将字典分成元祖列表
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
# 使用itemgetter,按照第二个元素的次序对元组进行排序
return sortedClassCount[0][0]

def test2():
group, label = createDataSet()
print(classify0([0.9,0.9],group,label,3))

test2()
2.2 示例:使用算法改进约会网站的配对效果

1 准备数据:从文本文件中解析数据
2 分析数据:使用Matplotlib创建散点图
3 准备数据:归一化数值
4 测试算法:作为完整程序验证分类器
5 使用算法:构建完整可用系统

待续……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐