sklearn库中包含着常用的机器学习算法,今天就作简单盘点。
导入数据样本
1 2 3 4 5 6 7 8
| from sklearn import datasets
wine = datasets.load_wine() X = wine.data y = wine.target
import numpy as np print (np.shape(X), np.shape(y))
|
(178, 13) (178,)
将数据分成训练数据和测试数据
1 2 3
| from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2,random_state=42) print(np.shape(X_train), np.shape(X_test))
|
(142, 13) (36, 13)
训练模型1:逻辑回归模型
1 2 3 4 5
| print("利用逻辑回归模型训练") from sklearn.linear_model import LogisticRegression model = LogisticRegression().fit(X_train, y_train) print("训练数据上的准确率为:%f" % (model.score(X_train, y_train))) print("测试数据上的准确率为:%f" % (model.score(X_test, y_test)))
|
利用逻辑回归模型训练
训练数据上的准确率为:0.978873
测试数据上的准确率为:1.000000
这里给LR模型喂数据,训练好的模型为model
,接下来把训练集X_train
和测试集X_test
喂入训练好的模型中,并打分。
模型训练是存在偏差的,毕竟LR模型较为简单,因此训练的准确率会出现抖动情况。
训练模型2:支持向量机模型
1 2 3 4 5 6
| print("利用svm模型训练") from sklearn.svm import SVC model = SVC().fit(X_train, y_train)
print("训练数据上的准确率为:%f" % (model.score(X_train, y_train))) print("测试数据上的准确率为:%f" % (model.score(X_test, y_test)))
|
利用svm模型训练
训练数据上的准确率为:1.000000
测试数据上的准确率为:0.388889
这里的模型在训练数据上的准确率不错,而测试集上表现糟糕。这就是 过拟合现象。
为此,才需要交叉验证:设定指定参数来避免过拟合。
训练模型3:决策树模型
1 2 3 4 5 6
| print("利用决策树模型训练") from sklearn import tree model = tree.DecisionTreeClassifier().fit(X_train, y_train)
print("训练数据上的准确率为:%f" % (model.score(X_train, y_train))) print("测试数据上的准确率为:%f" % (model.score(X_test, y_test)))
|
利用决策树模型训练
训练数据上的准确率为:1.000000
测试数据上的准确率为:0.916667
训练模型4:神经网络
1 2 3 4 5 6 7
| print("利用神经网络模型训练") from sklearn.neural_network import MLPClassifier model = MLPClassifier(alpha=1e-5, hidden_layer_sizes=(200),solver='lbfgs',random_state=3 ) model.fit(X_train, y_train)
print("训练数据上的准确率为:%f" % (model.score(X_train, y_train))) print("测试数据上的准确率为:%f" % (model.score(X_test, y_test)))
|
利用神经网络模型训练
训练数据上的准确率为:0.401408
测试数据上的准确率为:0.388889
从MLPClassifier
模型函数中,我看到实际调参就是在理解原理的基础上,设定不同的参数,如这里指定了隐含层的个数、解算器方法、随机初始值。
在若干次运行后,可以看到该模型很不稳定,效果也没那么好,想必需要接下来好好调教。
最后,有人说“越复杂的模型,参数敏感度越高”,待我验证归来吧。