读取csv文件并进行8分类
csv文件数据集如下:
最后一列为label:1-8,即8分类
尝试:dag-SCM/简单的深度学习nn
问题:如果不进行normalization,则完全不学习,分类效果极差,acc=10,结果如下图:
进行normalization,prediction为0,无标签,混淆矩阵如下
读取csv文件并进行8分类
csv文件数据集如下:
进行normalization,prediction为0,无标签,混淆矩阵如下
参考GPT和自己的思路,首先,您提到的csv文件似乎有一些格式问题。网络列之间似乎缺少空格或逗号分隔符,可能是由于剪切和粘贴时发生了错误。另外,您的第7列似乎也被拆分成了“network”和“8”的两个单词。如果您可以将数据格式化并重新发布,这将有助于更好地理解您的数据。
其次,您提到如果不进行数据标准化,分类效果很差,这是可以理解的。对于基于距离或相似度的算法(如SVM),如果不对输入数据进行标准化,则其中一些特征的值范围可能会远远大于其他特征。这将导致某些特征对距离度量的影响远大于其他特征,从而影响分类器的性能。
您提到尝试了两种算法:dag-SCM和简单的深度学习nn。无论您使用哪种算法,都应该在输入数据之前对其进行标准化。如果您使用的是深度学习算法,则通常会将数据标准化为均值为0,标准差为1的标准正态分布。如果您使用的是SVM等算法,则可以使用min-max标准化将所有特征缩放到0到1之间。
最后,关于您的混淆矩阵:如果分类器的预测结果与真实标签相差太远,那么混淆矩阵可能会变得非常不平衡。在这种情况下,精度不一定是最好的性能度量。您可以考虑使用其他度量,如F1分数或ROC曲线下面积(AUC),以更好地了解分类器的性能。
以下是使用Python中的pandas和scikit-learn库进行数据读取、归一化、训练和预测的示例代码:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix
# 读取CSV文件
df = pd.read_csv('data.csv')
# 分割特征和标签
X = df.iloc[:, :-1]
y = df.iloc[:, -1]
# 将数据集分割成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 归一化特征数据
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 训练SVM分类器
clf = SVC(kernel='rbf', C=0.03125, gamma=3.0517578125e-05)
clf.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = clf.predict(X_test)
# 计算预测准确率和混淆矩阵
acc = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
print('Test accuracy:', acc)
print('Confusion matrix:', cm)
请注意,上述示例代码中的SVM参数是使用GridSearchCV进行超参数优化后得到的最佳参数。您可以根据需要更改SVM的参数和超参数优化的方法。此外,如果您使用的是其他分类算法(例如神经网络),则需要相应地更改代码。