机器学习中的分类模型有逻辑回归、朴素贝叶斯、决策树、支持向量机、随机森林、梯度提升树等分类算法,不仅可以进行二分类,还可以进行多分类。
逻辑回归的本质就由线性回归演变而来,是一个线性分类器。sklearn实现的LogisticRegression不仅可用于二分类,也可以用于多分类。
优点:
缺点:
# 一般的训练模型代码
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LogisticRegression as LR
# data是dataframe对象数据,取特征与标签
X = data.iloc[:,1:]
y = data.iloc[:,0]
# 使用交叉验证大概看一下模型效果。
lr_ = LR()
score_ = cross_val_score(lr_, X, y, cv=10).mean()
score_
# 使用学习曲线进行调参,此方法适合训练时间比较长的模型
# 逻辑回归中主要几个需要调的参数:penalty;C;solver。
l1 = []
l2 = []
C = np.arange(0.1, 20.1, 0.5) #
for i in C:
lrl1 = LR(penalty='l1', solver='liblinear', C=i, max_iter=1000).fit(X_train, Y_train)
l1.append(lrl1.score(X_vali, Y_vali))
lrl2 = LR(penalty='l2', solver='liblinear', C=i, max_iter=1000).fit(X_train, Y_train)
l2.append(lrl2.score(X_vali, Y_vali))
print(max(l1), C[l1.index(max(l1))])
print(max(l2), C[l2.index(max(l2))])
plt.figure(figsize=(20,5))
plt.plot(C, l1, label='l1')
plt.plot(C, l2, label='l2')
plt.legend(loc=4)
plt.show()
# 还可以使用网格搜索调参
# 网格搜索进行调参
from sklearn.model_selection import GridSearchCV
parameters = {'C':[*np.linspace(0.1,1,5)]
,'solver':('liblinear','saga','newton-cg','lbfgs', 'sag')
# ,'max_iter':[100,150,200]
}
lr = LR(penalty='l2', C=0.1, solver='liblinear')
gs = GridSearchCV(lr, parameters, cv=10)
gs.fit(X_train, Y_train)
print("best params:", gs.best_params_)
print("best score:", gs.best_score_)
具体接口参见官方文档
决策树是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规 则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。
优点:
缺点:
# 决策分类树模型训练
from sklearn import tree
clf = tree.DecisionTreeClassifier(criterion='entropy',
random_state=1,
splitter='random')
clf.fit(X_train, Y_train)
clf.score(X_vali, Y_vali)
# 调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。
决策树可调的参数比较多,criterion(衡量分枝质量的指标)、splitter(分枝策略)、max_depth(树的最大深度)、max_features(做最佳分枝时考虑特征的个数)等等,具体接口参见官方文档
支持向量机是一种典型的二分类模型。
优点:
缺点:
# 支持向量机 SVM
from sklearn.svm import SVC
clf = SVC(kernel='linear'
,gamma='auto'
,degree=1
,cache_size=5000).fit(X_train, Y_train)
clf.score(X_vali, Y_vali)
# 调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。
具体接口参加官方文档
随机森林是一个集成算法分类器,其所有的基分类器都是决策树,然后通过装袋法(Bagging)进行集成。
优点:
缺点:
# 随机森林分类器
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier()
rfc.fit(X_train, Y_train)
rfc.score(X_test, Y_test)
# 调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。
具体接口参见官方文档
XGBoost模型是一种使用提升法(Boosting)集成的集成分类器,利用许多弱分类器集成在一起形成一个强分类器的模型。
优点:
缺点:
# XGBoost模型
from xgboost import XGBRegressor as XGBR
reg = XGBR(n_estimators=100).fit(X_train,Y_train)
reg.score(X_test,Y_test)
# 调参方法与前面模型一致。
具体接口参见官方文档
LightGBM模型也是一种使用提升法(Boosting)集成的集成分类器,利用弱分类器(决策树)迭代训练以得到最优模型。
LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。
优点:
缺点:
# LightGBM模型
from lightgbm import LGBMClassifier
# lightgbm除了有分类器还有回归模型
gbm = LGBMClassifier(num_leaves=31, learning_rate=0.05, n_estimators=20)
gbm.fit(X_train, Y_train, eval_set=[(X_test, Y_test)], early_stopping_rounds=5)
# 网格搜索,参数优化
estimator = LGBMClassifier(num_leaves=31)
params = {
'learning_rate': [0.01, 0.1, 1],
'n_estimators': [20, 40]
}
gbm = GridSearchCV(estimator, params)
gbm.fit(X_train, Y_train)
print('Best parameters:', gbm.best_params_)
具体接口参见官方文档
朴素贝叶斯分类器的本质是贝叶斯定理。其有个前提假设(属性条件独立),常用于文本分类。
优点:
缺点:
# 高斯朴素贝叶斯模型
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
gnb.fit(X_train, Y_train)
还有其他类型的贝叶斯模型,具体参见官方文档
官方原话:
On the flip side, although naive Bayes is known as a decent classifier, it is known to be a bad estimator, so the probability outputs from predict_proba are not to be taken too seriously.
[翻译] 另一方面,尽管朴素贝叶斯分类器被认为是一个不错的分类器,但它是一个糟糕的估计器,因此不必太认真地对待来自predict_proba的概率输出。
持续更新。。。