更新 function.py
Gitea Actions Challenge Test / Challenge-Actions (push) Successful in 26s

This commit is contained in:
2024-10-08 23:05:15 +08:00
parent 47cc47bc65
commit f0cd071eba
+57 -65
View File
@@ -40,68 +40,60 @@ name = "章程鸿"
# 这里写自己的代码实现
import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
def load_data(file_path):
"""
加载 TSV 格式数据文件。
"""
data = np.loadtxt(file_path, delimiter="\t")
features = data[:, :-1]
labels = data[:, -1].astype(int)
return features, labels
def normalize_min_max(data):
"""
对数据进行最小-最大缩放归一化。
Args:
- data (numpy array): 待归一化的数据。
Returns:
- numpy array: 归一化后的数据。
- numpy array: 最小值。
- numpy array: 最大值。
"""
min_vals = data.min(0)
max_vals = data.max(0)
ranges = max_vals - min_vals
ranges[ranges == 0.0] = 1.0 # 避免除以零
norm_data = (data - min_vals) / ranges
return norm_data, min_vals, max_vals
if __name__ == "__main__":
train_file = "datingTrainSet2.tsv"
test_file = "datingTestSet2.tsv" # 假设您有一个测试集文件
# 加载训练和测试数据
train_data, train_labels = load_data(train_file)
test_data, test_labels = load_data(test_file)
# 归一化训练和测试数据
train_data_normalized, min_vals, max_vals = normalize_min_max(train_data)
test_data_normalized = (test_data - min_vals) / (max_vals - min_vals)
# 定义KNN分类器
knn = KNeighborsClassifier()
# 定义要搜索的k值范围
param_grid = {'n_neighbors': list(range(1, 31))}
# 使用GridSearchCV进行网格搜索
grid_search = GridSearchCV(knn, param_grid, cv=10, scoring='accuracy')
grid_search.fit(train_data_normalized, train_labels)
# 获取最佳的k值
optimal_k = grid_search.best_params_['n_neighbors']
print("Optimal k:", optimal_k)
# 使用最佳k值进行预测
best_knn = KNeighborsClassifier(n_neighbors=optimal_k)
best_knn.fit(train_data_normalized, train_labels)
# 对测试数据进行预测
predicted_labels = best_knn.predict(test_data_normalized)
print("预测的分类标签是:", predicted_label[0])
import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score
def load_data(file_path):
"""
加载 TSV 格式数据文件。
"""
data = np.loadtxt(file_path, delimiter="\t")
features = data[:, :-1]
labels = data[:, -1].astype(int)
return features, labels
if __name__ == "__main__":
train_file = "datingTrainSet2.tsv"
test_file = "datingTestSet2.tsv" # 假设您有一个测试集文件
# 加载训练和测试数据
train_data, train_labels = load_data(train_file)
test_data, test_labels = load_data(test_file)
# 使用MinMaxScaler进行归一化
scaler = MinMaxScaler()
train_data_normalized = scaler.fit_transform(train_data)
test_data_normalized = scaler.transform(test_data)
# 定义KNN分类器
knn = KNeighborsClassifier()
# 定义要搜索的k值范围
param_grid = {'n_neighbors': list(range(1, 31))}
# 使用GridSearchCV进行网格搜索
grid_search = GridSearchCV(knn, param_grid, cv=10, scoring='accuracy')
grid_search.fit(train_data_normalized, train_labels)
# 获取最佳的k值
optimal_k = grid_search.best_params_['n_neighbors']
print("Optimal k:", optimal_k)
# 使用最佳k值进行预测
best_knn = KNeighborsClassifier(n_neighbors=optimal_k)
best_knn.fit(train_data_normalized, train_labels)
# 对测试数据进行预测
predicted_labels = best_knn.predict(test_data_normalized)
# 输出预测结果
print("预测的分类标签是:")
for i, (predicted, actual) in enumerate(zip(predicted_labels, test_labels)):
print(f"样本 {i+1}: 预测标签: {predicted}, 实际标签: {actual}")
# 计算并输出准确率
accuracy = accuracy_score(test_labels, predicted_labels)
print(f"模型在测试集上的准确率为: {accuracy * 100:.2f}%")