IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习———K近邻算法实例 -> 正文阅读

[人工智能]机器学习———K近邻算法实例

K-近邻算法之约会网站配对及手写识别系统
一、约会网站配对
1.1案例分析

我的朋友海伦一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的人选,但她没有从中找到喜欢的人。经过一番总结,她发现曾交往过三种类型的人:
□ 不喜欢的人
□ 魅力一般的人
□ 极具魅力的人
海伦收集了自己的一些约会记录的数据信息。每个样本数据占据一行,总共有1000行。
数据文件 datingTestSet2.txt
海伦的样本数据局主要包含以下3种特征:
□ 每年获得的飞行常客里程数
□ 玩视频游戏所耗时间百分比
□ 每周消费的冰淇淋公升数
她希望通过以上这三个特征来进行判断自我感觉。
在这里插入图片描述
1.2数据格式
数据存储在文件datingTestSet.txt 中,每个样本数据占据一行,总共有1000行,以下是样本特征

□ 每年获得的飞行常客里程数
□ 玩视频游戏所耗时间百分比
□ 每周消费的冰激凌公升数
1.3代码实现

def file2matrix1(filename):
    fr = open(filename)
    arrayLines = fr.readlines() # 读取数据
    numberLines = len(arrayLines) # 记录行数
    returnMat = zeros((numberLines,3))
    classlabelVector = []
    index = 0
    for line in arrayLines:
        line = line.strip()
        listFromLine = line.split('\t')
        returnMat[index,:] = listFromLine[0:3]
        classlabelVector.append(int(listFromLine[-1]))
        index +=1
    return returnMat,classlabelVector
def file2matrix(filename):
    love_dictionary={'largeDoses':3, 'smallDoses':2, 'didntLike':1}
    fr = open(filename)
    arrayOLines = fr.readlines()
    numberOfLines = len(arrayOLines)            #get the number of lines in the file
    # 创建一个1000行 3列矩阵 并用0来填充
    returnMat = zeros((numberOfLines,3))        #prepare matrix to return
    # 创建 目标变量列表
    classLabelVector = []                       #prepare labels return
    index = 0
    for line in arrayOLines:
        line = line.strip() # 截取掉回车字符
        listFromLine = line.split('\t')
        returnMat[index,:] = listFromLine[0:3] # 将文件切割后前三列存储到 矩阵中
        print(returnMat)
        if(listFromLine[-1].isdigit()): # isdigit() 检查是否为10进制数字
            classLabelVector.append(int(listFromLine[-1])) # 将最右列元素添加到列表中
        else:
            classLabelVector.append(love_dictionary.get(listFromLine[-1])) # 通过字典转换为数字存储到列表
        index += 1
    return returnMat,classLabelVector

datingDataMat,datingLabels = file2matrix("datingTestSet.txt")

import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure() # 建立画板
ax = fig.add_subplot(111) # 添加一个子图
#    x[:,1]获取第二列作为一维数组,x[:,0]获取第一列作为一维数组
ax.scatter(datingDataMat[:,1], datingDataMat[:,2], 15.0*array(datingLabels), 15.0*array(datingLabels))
ax.axis([-2,25,-0.2,2.0]) # x轴范围 -2~25 y轴范围 -0.2~2.0

plt.xlabel("df")
plt.ylabel('每周消耗冰激凌公升数')
plt.show()
result = classify0([1,1],group,labels,3)
print(result)

import matplotlib
print(matplotlib.matplotlib_fname())


1.4归一化数值

需求分析
在这里插入图片描述
1.5运行结果
在这里插入图片描述
二、手写识别系统
1.1案例分析
手写数字识别,或者说图像识别的本质就是把图所示的一张图片转换成计算机能够处理的数字形式
数据集(手写字图片被保存为32*32的二进制文件)
在这里插入图片描述

具体训练数集需另行下载

1.2代码实现

# step1 : scikit-learn自带数据集
#  通过sklearn.datasets.load_digits()来加载
#  包含1797个样本,每个样本包括8*8像素的图像和一个【0,9】整数的标签

# step2 : 算法选择-K近邻算法
#  K近邻算法假设给定一个训练数据集,其中的实例类别已定,
#  分类时,对新的实例,根据其K个最近的训练实例的类别,
#  通过多数表决等方式进行预测
#    距离新的图片最近的k张已知图片,求新的图片的类别,假如k=10
#    7张属于5类别,2张属于3类别,1张属于2类别,所以新的图片类别是5

from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score


# 加载数据集
sample_data=datasets.load_digits()

# 对数据进行分类:训练集(80%)和测试集(20%),用四个变量接受
train_data,test_data,train_target,test_target=train_test_split(sample_data.data,sample_data.target,test_size=0.2)

# 实例化一个模型,参数n_neighbors即为参数K =》 影响误差
knn_model=KNeighborsClassifier(n_neighbors=8)

# 训练模型
knn_model.fit(train_data,train_target)

# 应用模型进行预测
pred=knn_model.predict(test_data)
print(pred[0:9])
print(test_target[0:9])
for r in range(0,1791):
    print(sample_data.images[r])

print('共训练了%d个样本'%r)

# 对预测结果进行评分
acc=accuracy_score(pred,test_target)
print('准确度: '+str(acc*100)+'%')
# 0.9861111111111112


# # 看看数据集的前几张图片都属于哪个类
# print(sample_data.target[0:6])
# # [0 1 2 3 4 5]
#
# # 看看第二张图片
# print(sample_data.images[1])
# # [[ 0.  0.  0. 12. 13.  5.  0.  0.]
# #  [ 0.  0.  0. 11. 16.  9.  0.  0.]
# #  [ 0.  0.  3. 15. 16.  6.  0.  0.]
# #  [ 0.  7. 15. 16. 16.  2.  0.  0.]
# #  [ 0.  0.  1. 16. 16.  3.  0.  0.]
# #  [ 0.  0.  1. 16. 16.  6.  0.  0.]
# #  [ 0.  0.  1. 16. 16.  6.  0.  0.]
# #  [ 0.  0.  0. 11. 16. 10.  0.  0.]]

# # 看看第二张图片本来长什么样子
# # 因为把每张图片都做成了矩阵形式,所以用matshow()
# plt.matshow(sample_data.images[1])
# plt.show()

# KNN算法 伪代码
#  假设x_text为待标记的数据样本,x_train为已标记的数据集,伪代码如下:
#  遍历x_train中的所有样本,计算每个样本与y_test的距离,并把距离保存在 distance数组中
#  对distance进行排序,取距离最近的K个点,几位x_knn
#  在k_nn中统计每个类别的个数,即class_0在k_nn中有几个样本,class_1在x_knn中有几个样本
#  待标记样本的类别,就是在x_knn中样本个数最多的那个类别

# 算法参数: K
#  距离一般用欧式距离或者曼哈顿距离
#  欧氏距离:|x| = √( x[1]2 + x[2]2 + … + x[n]2 )
#  定义:欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:31:30  更:2021-10-11 17:32:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:35:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码