我是机器学习的新手,看了一些教程后,我建立了数据库,经过几次调整,现在一切正常工作。
现在我需要用这个模型创建一个Web应用。我发现可以使用pickle库来准备模型。问题是我不知道我是否在模型准备方面做得好。我想从数据库的四个列中获取信息,这些列在X中,并得到三个输出,其中一个是合金,另外两个是烤箱中的小时数和回火温度。所以,计划是基于这个模型准备创建Flask API,并创建一个带有一些CSS样式的简单HTML表单,用户可以在其中输入四个机械要求,并获得实现这些要求的输出。使用哪种合金,设定什么回火温度,以及在老化烤箱中需要多少小时。
https://github.com/nemanjaKostovski/MLmodel – 这是我目前的工作…关于详细的迷你环境,您可以查看我的GitHub仓库。提前感谢。
import pandas as pdfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_scoreimport scikitplot as skpltimport seaborn as snsdf = pd.read_csv('Bazaproizvodnjaprofila1.csv')X = df[['Rm', 'Rp', 'A%', 'Wb', 'Hours in oven' ]].valuesy = df[['Alloy']].valuesX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=2)print("whole dataset:", X.shape, y.shape)print("training set:", X_train.shape, y_train.shape)print("test set:", X_test.shape, y_test.shape)model = LogisticRegression(max_iter=6500)model.fit(X_train, y_train.ravel())y_pred = model.predict(X_test)print("accuracy:", accuracy_score(y_test, y_pred))sns.relplot(data=df, x="Rm", y="A%", hue="Alloy", alpha=0.8)skplt.metrics.plot_confusion_matrix( y_test, y_pred, figsize=(12,12), text_fontsize=20, title_fontsize=20)
回答:
对我来说看起来还不错。我根据标准和个人偏好做了一些小的调整。继续努力!另外,这里有一个总体建议:尝试创建一个保留验证集或使用交叉验证来测量准确率或任何你用来验证模型的指标。在你对模型完全确定之前,不要碰测试集。
使用drop更有效,你也可以使用axis = ‘columns’(考虑到你使用了除目标之外的所有特征)
X = df.drop('Alloy', axis=1).values
不需要使用双[]
y = df['Alloy'].values
如果希望测试集与训练集有相同的分布,可以使用stratify。默认测试集划分大小为0.25,你可以使用test_size来更改它
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, stratify=y, random_state=2)
这是我个人的偏好 – 更整洁
print(f"whole dataset shape: X: {X.shape}, y: {y.shape}")print(f"Training set shape: X_train: {X_train.shape}, y_train: {y_train.shape}")print(f"Test set shape: X_test: {X_test.shape}, y_test: {y_test.shape})model = LogisticRegression(max_iter=6500)
如果不使用双[],就不需要使用.ravel()
model.fit(X_train, y_train) y_pred = model.predict(X_test)
分类模型的默认评分指标是准确率。原来LogisticRegression类中的.score()方法直接调用了sklearn.metrics.accuracy_score方法。
print(f'Test Accuracy score: {model.score(X_test, y_test)}')sns.relplot(data=df, x="Rm", y="A%", hue="Alloy", alpha=0.8)skplt.metrics.plot_confusion_matrix( y_test, y_pred, figsize=(12,12), text_fontsize=20, title_fontsize=20)