模型的准确性

数据挖掘 机器学习 特征选择 逻辑回归 准确性
2022-03-08 03:59:57

我正在使用这个数据集,我正在尝试进行逻辑回归

heart_data = pd.read_csv('../input/heart-disease-uci/heart.csv')
X = heart_data.iloc[:,:-1]
y = heart_data.iloc[:,-1]
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.20,random_state=5,shuffle=True)

from sklearn.preprocessing import MinMaxScaler

nr = MinMaxScaler()
X_train = nr.fit_transform(X_train)
X_test = nr.transform(X_test)

from sklearn.metrics import accuracy_score

def cal(method,c=1):
    lr = LogisticRegression(C=c,solver=method)
    lr.fit(X_train,y_train)
    pre_test = lr.predict(X_test)
    pre_train = lr.predict(X_train)
    train_score = accuracy_score(y_train,pre_train)
    test_score = accuracy_score(y_test,pre_test)
    return train_score,test_score
for i in method:
    print(i,'->>>>>>>>',cal(i))

在此处输入图像描述

第一个是训练准确度,第二个是测试准确度。为什么我在训练中获得更高的测试准确性?

还有另一种方法可以提高两者的准确性吗?我正在使用最小-最大缩放,所以是否有任何其他归一化来提高精度,或者这是我们使用逻辑可以获得的最佳精度?

2个回答

很好,你提出这个问题,因为很可能有一个错误。

我已经完成了 100 多个 ML 模型,并且从未见过测试准确度高于训练准确度。

潜在的错误?您的训练中的类别标签很可能比您的测试集中的类别标签多得多。解决方案?试试 class_weight = "balanced"。这很可能会解决它。

另一个潜在的问题?你修复了随机种子吗?你没有把C设置在高水平?例如 100、1000..

PS:不错!我看到你先标准化,然后拆分训练和测试!做得好。通过这样做,您可以避免数据泄漏。 在此处输入图像描述

与训练集相比,在测试集上具有更高的准确度本质上并不是坏事。这意味着您的模型绝对没有过度拟合训练数据,并且对于看不见的数据具有足够的泛化能力。您可以检查许多不同的指标来验证。准确性实际上只是其中的一部分。

至于提高准确性,这将需要一些工作。无法保证,但可以采取一些步骤来寻求更高的准确性。尝试一些事情,比如减少功能,只使用最重要的功能。有很多技术可以做到这一点。你也可以尝试调整你的超参数,这有点乏味。sklearn 文档将向您显示模型使用的所有默认值,您将能够相应地进行调整。您可以对完整数据集执行基本数据分析,以帮助指导您的决策。