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站上莫凡大佬的机器学习课真不错(入门必备) nanaqilin 发表于 2021-5-2 17:31
这种算法库可以转成C语言版的不?
这个库是依赖numpy的,numpy是c语言写的,众所周知python的计算速度比较慢,计算过程应该都是调用numpy算的,但python作为一个工具人传一下指令比较简洁易懂。简单查了一下这个库好像只提供了python的API。 这种算法库可以转成C语言版的不? 学习到了! 学习了,谢谢分享!
页:
[1]