漏洞扫描的原理
2026/4/24 2:56:29
本项目使用 KNN 算法实现人脸特征分类,自动识别老师和学生,适合机器学习入门。
本项目旨在基于人脸特征(年龄、颜值、衣着、体型、发色、发量)自动识别老师或学生身份(老师=1,学生=0)。方法采用监督学习中的KNN算法。流程包括:
以下Python代码可直接运行,实现数据转换、模型训练和预测。代码已添加注释以提高可读性。
import xlrd import csv import codecs import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score # 1. xls转csv def xlsx_to_csv(): workbook = xlrd.open_workbook('特征值表单.xls') table = workbook.sheet_by_index(0) with codecs.open('1.csv', 'w', encoding='GB18030') as f: write = csv.writer(f) for row_num in range(1, table.nrows): row_value = table.row_values(row_num) write.writerow(row_value) xlsx_to_csv() # 2. 加载数据 def load_data(filename): data = np.genfromtxt(filename, delimiter=',') x = data[:, 1:7] y = data[:, 7].astype(int) x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=2024) return x_train, x_test, y_train, y_test X_train, X_test, y_train, y_test = load_data("1.csv") # 3. KNN训练 knn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, y_train) y_pred = knn.predict(X_test) # 4. 输出带姓名的结果 df = pd.read_csv("1.csv", header=None, encoding="gbk") _, _, _, test_idx = train_test_split(np.arange(len(df)), df.iloc[:,7], test_size=0.3, random_state=2024) names = df.iloc[test_idx, 0].values print("======= 测试集预测结果 =======") for name, p, t in zip(names, y_pred, y_test): print(f"姓名:{name:8}\t预测:{p}\t真实:{t}") # 5. 准确率 acc = np.mean(y_pred == y_test) print(f"\n测试集准确率:{acc:.2%}") # 6. 交叉验证平均准确率 scores = cross_val_score(knn, X_train, y_train, cv=3) print(f"3折交叉验证:{scores}") print(f"平均准确率:{np.mean(scores):.2%}")执行代码后输出如下结果:
======= 测试集预测结果 ======= 姓名:姜永增 预测:1 真实:1 姓名:吴迪 预测:1 真实:1 姓名:孙晓宇 预测:0 真实:0 姓名:学生2 预测:0 真实:0 姓名:学生5 预测:0 真实:0 测试集准确率:100.00% 3折交叉验证:[0.75 1. 0.66666667] 平均准确率:80.56%通过本次课程学习,我掌握了机器学习的基本流程、常用算法和项目实现方法。借助 AI 工具,我成功完成了师生身份识别案例,理解了数据读取、模型训练、预测评估的全过程。