-
实验概述import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier df = pd.read_csv('datatest.csv', names=['出行', '游戏时间', '冰激凌', '配对结果']) print(df) # 取所有的行,1,2,3列作为特征,4列标签结果 feature = df.iloc[:, 0:3] print(feature) target = df.iloc[:, -1] print(target) # 划分数据集test_size:测试集占比 random_state:随机数种子 # 训练集的特征数据,测试集的特征数据,训练集的目标数据,测试集的目标数据 x_train, x_test, y_train, y_test = train_test_split \ (feature, target, test_size=0.20, random_state=1500) print(x_train.shape, x_test.shape) # 标准化 ss = StandardScaler() x_train = ss.fit_transform(x_train) print(x_train) # 创建KMN算法对象,指定K值 knn = KNeighborsClassifier(n_neighbors=3) # 训练模型(训练集的特征数据和目标数据) knn.fit(x_train, y_train) # 用测试集验证数据,得到评价指标 # 测试集数据也必须标准化,但是不需要再计算均值和方差,训练集进行标准化的时候已经找到了均值和方差 # 已经找到转换规则,我们把这个规则用在了训练集上,同样我们可以直接用在测试集上,所以在测试集上的处理,我们只需要标准化 x_test = ss.transform(x_test) score = knn.score(x_test, y_test) print(f'模型评分{score}') # 预测 x_test1 = [[90000, 3.99, 7.25], [1001, 4, 3.2]] x_test1 = ss.transform(x_test1) y_predict = knn.predict(x_test1) print(y_predict)
- 实验目标和主要内容
实验目标:根据海伦女士对其他人的喜欢程度以及其他人的3种共同特征(每年出行的里程数、玩游戏的时间占比、每周吃冰激凌的时间占比)的数据,通过KNN算法,实现当给出某人这3种特征的具体数据时,预测海伦女士对此人的喜欢程度;
开发平台:PyCharm Community Edition 2021.3.2 x64
语言:Python
主要内容:
海伦女士一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的任选,但她并不是喜欢每一个人。经过一番总结,她发现自己交往过的人可以进行如下分类:
·不喜欢
·魅力一般
·极具魅力
海伦收集约会数据已经有了一段时间,她把这些数据存放在文本文件datingTestSet.txt中,每个样本数据占据一行,总共有1000行。海伦收集的样本数据主要包含以下3种特征:
·每年出行的里程数
·玩游戏的时间占比
·每周吃冰淇淋的公升数
根据已有数据通过KNN算法建立模型,预测海伦女士对任意约会对象的喜欢程度。
2、实验设计
2.1关键算法分析
算法1:数据集划分
分析:设置随机数种子,随机取80%的数据作为训练集,20%的数据作为测试集。
主要代码:
算法2:数据标准化
代码:
算法3:创建KNN算法对象,训练模型
代码:
算法4:用测试集验证数据,得到评价指标
主要代码:
算法6:根据给出的具体数据进行预测
概述:给出具体的特征数据,带入模型,预测海伦女士对此人的喜欢程度。
代码:
3、实验结果
对于给出具体的特征数据,带入模型,预测的结果为:
运行结果:
说明海伦女士对每年出行的里程数、玩游戏的时间占比、每周吃冰激凌的时间占比分别为90000, 3.99, 7.25的人的喜欢程度为didntLike,对每年出行的里程数、玩游戏的时间占比、每周吃冰激凌的时间占比分别为1001, 4, 3.2的人的喜欢程度为smallDoses。
4、实验小结
- 利用KNN算法进行预测模型的建立,用于训练和测试的数据需要从数据集中划分。原则上训练数据多余测试数据,且数据总量足够多,才能使预测模型更加准确;
- 训练数据集和测试集数据都必须做标准化处理。