天空宫阙 发表于 2021-5-2 17:11

sklearn库调用knn算法实现猫眼字体识别

本帖最后由 天空宫阙 于 2021-5-2 17:11 编辑

# knn-font
使用sklearn库调用knn算法实现猫眼字体识别

## 介绍
本来想跟随大佬的脚步在猫眼电影实践一波knn(k近邻算法),没想到猫眼电影现在的字体文件是静态的(20210502)。只能使用archive找了几个网站曾出现过的woff字体文件加上这个仓库本来就有的5个一共10个字体文件,一个woff字体10个字符共100个数据。

因为现在字体文件是静态的用knn有点杀鸡用牛刀了,但是训练数据包含了**目前的静态的字体文件**按照knn k取1的算法 预测的准确率必定是**100%**,就算网址之后改回动态字体该方法仍然适用。


## 核心代码
get_font_data 函数的作用为数据准备
把woff文件转成可以计算的数据
数据为一个二维列表,第一列为真实字符值(要预测的数字),其余列为该字符在字体文件中坐标展平结果(作为属性)

```
<!-- 核心knn 算法调用sklearn实现 -->
import numpy as np
import pandas as pd
from font import get_font_data
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import pickle


def main():
      # 处理缺失值
      imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
      data = pd.DataFrame(imputer.fit_transform(pd.DataFrame(get_font_data())))

      # 取出特征值\目标值
      x = data.drop(, axis=1)
      y = data
      # print(y)

      # 分割数据集
      # x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2,random_state=0)
      # x_train = x.head(30)
      # y_train = y.head(30)
      
      x_train = x.iloc
      y_train = y.iloc
      x_test = x.iloc
      y_test = y.iloc
      print('训练集形状',x_train.shape)
      # 标准化
      # std = StandardScaler()
      # x_train = std.fit_transform(x_train)
      # x_test = std.transform(x_test)

      # 进行算法流程
      knn = KNeighborsClassifier(n_neighbors=1)
      # 开始训练
      knn.fit(x_train, y_train)
      # 预测结果
      y_predict = knn.predict(x_test)
      print(y_predict)

      # 得出准确率
      print(knn.score(x_test, y_test))

      # 保存模型
      # method 1 pickle
      # with open('model/knn.pickle','wb') as f:
      #         pickle.dump(knn,f)

      # 加载模型
      with open('model/knn.pickle','rb') as f:
                knn2 = pickle.load(f)
                print(knn2.score(x_test, y_test))


if __name__ == '__main__':
      main()
```

## 最终效果




## 完整代码
https://github.com/skygongque/knn-font/blob/master/test.py
仓库链接
https://github.com/skygongque/knn-font

## 其他
在数据准备过程中使用了numpy和pandas的常规操作借此机会熟悉一下
另外B站上莫凡大佬的机器学习课真不错(入门必备)

天空宫阙 发表于 2021-5-2 18:18

nanaqilin 发表于 2021-5-2 17:31
这种算法库可以转成C语言版的不?

这个库是依赖numpy的,numpy是c语言写的,众所周知python的计算速度比较慢,计算过程应该都是调用numpy算的,但python作为一个工具人传一下指令比较简洁易懂。简单查了一下这个库好像只提供了python的API。

nanaqilin 发表于 2021-5-2 17:31

这种算法库可以转成C语言版的不?

荆棘之吻 发表于 2021-5-2 17:57

学习到了!

gutiejun 发表于 2021-5-2 20:07

学习了,谢谢分享!
页: [1]
查看完整版本: sklearn库调用knn算法实现猫眼字体识别