吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2568|回复: 4
收起左侧

[Python 转载] sklearn库调用knn算法实现猫眼字体识别

[复制链接]
天空宫阙 发表于 2021-5-2 17:11
本帖最后由 天空宫阙 于 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([0], axis=1)
        y = data[0]
        # 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[30:100]
        y_train = y.iloc[30:100]
        x_test = x.iloc[0:30]
        y_test = y.iloc[0:30]
        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()

最终效果

01.png

完整代码

https://github.com/skygongque/knn-font/blob/master/test.py
仓库链接
https://github.com/skygongque/knn-font

其他

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

免费评分

参与人数 1吾爱币 +10 热心值 +1 收起 理由
苏紫方璇 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 天空宫阙 发表于 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
荆棘之吻 发表于 2021-5-2 17:57
gutiejun 发表于 2021-5-2 20:07
学习了,谢谢分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表