手写识别数字

kaggle 地址: https://www.kaggle.com/c/digit-recognizer

构造使用k-近邻分类器的手写识别系统。 这里主要识别 0~9。

读取数据

代码与前一篇文章《kNN》不同的就是读取数据这块。

整体思路过程一致。

1
2
3
4
5
6
7
8
def loadDataSet(path):
dataSet = pd.read_csv(path)
dataSetMat = np.array(dataSet)
dataLabel = dataSetMat[:,0]
trainMat = dataSetMat[:,1:]
m,n = trainMat.shape
datMat = np.multiply(trainMat != np.zeros((m,n)), np.ones((m,1)))
return datMat,dataLabel

Read More

kNN

《机器学习实战》 k-近邻算法学习笔记

1. 概述

k-近邻算法采用测量不同特征值之间的距离方法进行分类。

2. 原理

将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签。

即 选择 k 个最相似数据中出现次数最多的分类。

3. 伪代码

  1. 计算已知类别数据集中的点与当前点之间的距离
  2. 按照距离递增次序排序
  3. 选取与当前点距离最小的 k 个点
  4. 确定前 k 个点所在类别的出现概率
  5. 返回前 k 个点出现频率最高的类别作为当前点的预测分类

Read More

基于用户的协同过滤算法

推荐电影。

读取数据

文件格式: 用户 电影 评分…

1
2
3
4
5
6
7
fp = open("uid_score_bid","r")
users = {}
for line in fp:
lines = line.strip().split(",")
if lines[0] not in users:
users[lines[0]] = {}
users[lines[0]][lines[2]] = float(lines[1])

算法实现

利用皮尔逊相关系数计算公式 计算用户间的相似距离

  1. 计算出user与其他所有用户的相似度
  2. 将与uesr最相近的k个人中user没有看过的书推荐给user,分数排名
  3. 第i个人的与user的相似度,转换到[0,1]之间
  4. 第i个用户看过的书和相应的打分
  5. 排序

    Read More

python实现图片转字符串

学习pillow库 argparse库

原理

我们需要把一张彩色的图片对应到单色的字符画上。

灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称为灰度图像

公式:

gray = int(0.2126*r+0.7152*g+0.0722*b)

安装pillow库

pip install pillow

获取图片

wget http://labfile.oss.aliyuncs.com/courses/370/ascii_dora.png

字符集

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\()1{}[]?-_+~i!lI;:,\"^`'.")

代码

Read More

sigmod求导过程

公式:

f(z) = 1 / (1 + exp(-z))

结果

f(z)' = f(z)(1 − f(z))

推导过程

f(z) = 1 / (1 + exp(-z)) ->     exp(-z) = (1-f(z))/f(z)

f(z)' = (1 / (1 + exp(-z)))'
      = ((1 + exp(-z))^-1)'
      = (-1)*((1 + exp(-z))^-2)*(1 + exp(-z))'
      = -((1 + exp(-z))^-2)*exp(-z)'
      = -((1 + exp(-z))^-2)*(exp(z)^-1)'
      = -((1 + exp(-z))^-2)*(-1)(exp(z)^-2)exp(z)
      = (1 + exp(-z))^-2)*(exp(z)^-1)
      = (f(z)^2)*exp(-z)
      = (f(z)^2)*(1-f(z))/f(z)
      = f(z)*(1-f(z))