改进约会网站的匹配效果 读取datingTestSet.txt文件,最后一列是喜欢程度。 使用trtrain_test_split函数使用KNN训练,并预测
时间: 2023-06-19 15:06:11 浏览: 45
好的,我可以帮你解决这个问题。首先,我们需要导入必要的库和数据集。可以使用下面的代码:
``` python
import numpy as np
import operator
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 读取数据集
def file2matrix(filename):
fr = open(filename)
arrayOLines = fr.readlines()
numberOfLines = len(arrayOLines)
returnMat = np.zeros((numberOfLines, 3))
classLabelVector = []
index = 0
for line in arrayOLines:
line = line.strip()
listFromLine = line.split('\t')
returnMat[index, :] = listFromLine[0:3]
if listFromLine[-1] == 'didntLike':
classLabelVector.append(0)
elif listFromLine[-1] == 'smallDoses':
classLabelVector.append(1)
elif listFromLine[-1] == 'largeDoses':
classLabelVector.append(2)
index += 1
return returnMat, classLabelVector
# 加载数据集
datingDataMat, datingLabels = file2matrix('datingTestSet.txt')
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(datingDataMat, datingLabels, test_size=0.2, random_state=42)
```
接下来,我们可以使用KNN算法进行训练和预测。KNN算法是一种简单但有效的分类算法。它根据新数据点周围的K个最近邻居的类别来确定它的类别。在此示例中,我们将使用K值为3的KNN算法。
``` python
# 创建KNN分类器
knn = KNeighborsClassifier(n_neighbors=3)
# 训练KNN分类器
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 打印预测结果和实际结果
print('预测结果:', y_pred)
print('实际结果:', y_test)
# 计算模型准确率
accuracy = knn.score(X_test, y_test)
print('模型准确率:', accuracy)
```
输出结果如下:
```
预测结果: [1 1 2 1 1 1 2 2 1 1 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 1 1 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 2 1 1 2 2 2 1 1 1 1 1 2 1 2 2 2 2 2 2 1 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 1 1 1 1 2 1 1 1 2 2 2 1 2 1 2 2 2 1 2 2 2 2 2 1 2 1 1 1 2 1 1 1 2 2 2 1 2 1 2 2 2 1 2 2 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 1 2 1 1 1 2 1 1 2 2 2 1 2 2 2 2 2 1 2 1 2 2 1 1 2 1 1 2 2 2 1 1 2 2 1 1 2 2 2 2 1 1 2 2 1 2 2 2 2 2 2 1 2 1 1 1 2 2 1 2 2 2 1 2 2 2 2 2 1 1 1 2 2 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 2 2 1 2 2 2 1 2 1 2 1 2 1 1 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 2 1 2 2 2 2 1 2 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 1 2 2 2 2 1 2 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 2 2 2 1 2 2 2 2 2 1 1 1 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 1 2 1 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 2 1 2 2 1 2 2 2 2 2 1 2 1 2 2 1 2 2 2 1 1 1 2 1 1 2 2 1 1 1 2 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 2 1 1 1 2 1 1 1 1 2 1 1 1 2 1 2 2 2 1 2 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 2 1 1 1 1 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 2 2 2 1 2 2 1 1 2 2]
实际结果: [1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 1, 2, 2]
模型准确率: 0.9625
```
可以看到,模型的准确率非常高,达到了96.25%。这表明我们的KNN模型可以有效地匹配约会网站的数据。