Py学习  »  机器学习算法

机器学习之模型训练

衡阳信安 • 1 年前 • 77 次点击  

Use Scikit-learn

通过昨天对分类算法的大概了解,我们现在可以尝试进行一次简单的实践,使用sklearn这个库来进行模型训练

本质上,在sklearn库里,如果我们要分类,有很多可以选择的算法,这第一个算法我们选择逻辑回归模型,这个玩意涵盖了包括决策树在内的一系列模型,要使用这个东西,那么我们需要注意的是两个重要参数: multi_class 和 solver
multi_class 是选择的模型,这里给出的例子有两个

  • One-vs-rest(OVR,这个就是One-vs-all),需要将multi_class设置为ovr

  • Corss-entropy loss(交叉熵),就要将multi_class设置为multinominal

solver是实际用来实现模型的算法,一个模型可以用多种算法去实现,每一种都有自己的特点,像交叉熵就提供了lbfgs sag saga newton-cg之类的算法,在sklearn提供的范围内,下面这些事常见的

现在我们使用sklearn来训练数据,操作很方便

lr = LogisticRegression(multi_class="ovr", solver="liblinear")
model = lr.fit(X_train, np.ravel(Y_train))

accuracy = model.socre(X_test, Y_test)
print(accuracy)

其中 np.reval就是简单地将多维数据缩放到一维,在上面那个例子里,如果使用昨天清理好的训练集,准确率可以达到 80%,很不错的一个数据(其实差点)
那么OVR是如何分类的呢?我们可以大概理解为百分比,我们可以从测试集里随便取点数据出来

test = X_test.iloc[50].values.reshape(-11).T

这样随便取了一行,然后用模型进行分类

proba = model.predict_proba(test) #预测百分比
classes = model.classes_ #获取有哪些分类
resultdf = pd.DataFrame(data=proba, columns=classes)

现在,resultdf就包含了各个分类的百分比,结果如下


0
indian0.715851
chinese0.229475
japanese0.029763
korean0.017277
thai0.007634

因此,OVR模型认为,test这道菜是印度料理,也就完成了分类,剩下几种分类其实也差不多,就简单贴一下代码了




    
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
import numpy as np

C = 10
# Create different classifiers.
classifiers = {
    'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0),
    'KNN classifier': KNeighborsClassifier(C),
    'SVC': SVC(),
    'RFST': RandomForestClassifier(n_estimators=100),
    'ADA': AdaBoostClassifier(n_estimators=100)
}

今天因为还有别的一些事情,就只写了这么一点了,明天见~

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/151967
 
77 次点击