import time
import random
import xlsxwriter
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
def file2matrix(filename):
fr = open(filename)
lines = fr.readlines()
numberOfLines = len(lines)
returnMat = []
returnLabel = []
for line in lines:
line = line.strip()
listFromLine = line.split('\t')
if len(listFromLine) == 51: # 假设每行包含50个特征值和1个标签值
returnMat.append(listFromLine[0:50]) # 将前50个元素添加到returnMat中
returnLabel.append(listFromLine[-1]) # 将最后一个元素作为标签添加到returnLabel中
returnMat = np.array(returnMat, dtype=float) # 将returnMat转换为浮点类型的NumPy数组
returnLabel = np.array(returnLabel, dtype=float) # 将returnLabel转换为浮点类型的NumPy数组
return returnMat, returnLabel
def autoNorm(dataSet):
minVals = dataSet.min(0)
maxVals = dataSet.max(0)
normDataSet = (dataSet - minVals) / (maxVals - minVals)
return normDataSet
# 从文件中加载数据
datingDataMat, datingLabels = file2matrix(r'D:\Project\50数据.txt')
# 对数据进行归一化
dataSet = autoNorm(datingDataMat)
# 使用PCA进行降维
pca = PCA(n_components=3)
dataSet = pca.fit_transform(dataSet)
start = time.perf_counter()
testsize = 0.25
# 将数据集拆分为训练集和测试集
xtrain, xtest, ytrain, ytest = train_test_split(dataSet, datingLabels, test_size=testsize)
# 创建并训练SVM模型
model = svm.SVC()
model.fit(xtrain, ytrain)
error = 0
for i in range(len(xtest)):
# 预测每个测试实例的标签
result = model.predict(xtest[i, :].reshape(1, -1))
if result != ytest[i]:
error += 1
accuracy = (1 - error / len(xtest)) * 100
print('准确率:', accuracy, '%')
end = time.perf_counter()
duration = end - start
print('耗时', duration, '秒')
欧克
这段代码是一个机器学习中的支持向量机(Support Vector Machine,SVM)分类器的示例。
主要功能如下:
- 从给定的文件中读取数据集(文件路径为
filename
)。 - 对数据集进行归一化处理,将特征值缩放到相同的范围内。
- 使用主成分分析(PCA)对数据集进行降维,将数据从原始的50维降到3维。
- 将数据集分割成训练集和测试集。
- 创建一个SVM分类器模型,并使用训练集对模型进行训练。
- 对测试集中的每个实例进行预测,并计算准确率。
- 输出准确率和代码的执行耗时。
总体来说,该代码实现了一个基于SVM的分类器,用于对数据集进行分类,并评估分类器的准确性。