各种模型的简单使用
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,)
# 把数据分成训练数据和测试数据
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:逻辑回归模型
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.964789
测试数据上的准确率为:0.972222
# 训练模型2:支持向量机模型
print("利用支持向量机模型训练")
from sklearn import svm
model = svm.SVC().fit(X_train, Y_train) # 采用默认参数
print("训练数据上的准确率为:%f" %(model.score(X_train, Y_train)))
print("测试数据上的准确率为:%f" %(model.score(X_test, Y_test)))
利用决策树模型训练
训练数据上的准确率为:1.000000
测试数据上的准确率为:0.944444
# 训练模型4:神经网络模型
print("利用神经网络模型训练")
from sklearn.neural_network import MLPClassifier
model = MLPClassifier(alpha=1e-5, hidden_layer_sizes=100, solver='lbfgs', random_state=1).fit(X_train, Y_train) # 其余采用默认参数
print("训练数据上的准确率为:%f" %(model.score(X_train, Y_train)))
print("测试数据上的准确率为:%f" %(model.score(X_test, Y_test)))
利用神经网络模型训练
训练数据上的准确率为:0.964789
测试数据上的准确率为:0.944444
机器学习系统的流程
其中,特征工程耗时最多。
端到端的学习可省略特征工程,深度学习中会用到。
身高体重预测
import numpy as np
# 身高,体重
data = np.array([[150, 50],
[152, 52],
[160, 55],
[164, 57],
[165, 58],
[168, 59],
[170, 60],
[171, 61],
[173, 61],
[173, 61],
[176, 63],
[177, 64],
[180, 67],
[183, 70],
[184, 71]], np.int32)
# 提出特征和标签
x = data[:, 0:-1]
y = data[:, 1]
print(np.shape(x), np.shape(y))
(15, 1) (15,)
# 可视化数据
import matplotlib.pyplot as plt
plt.scatter(x, y)
plt.show()
# 通过线性回归模型拟合给定的数据
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(x, y)
print(model.predict(165))
[52.17218816]
# 把学出来的实线和训练数据可视化在同一个图中
plt.scatter(x, y)
plt.plot(x, model.predict(x))
plt.show()
交叉验证
逻辑回归的两个重要超参数:惩罚项 penalty 和惩罚项的权重 C。C 越小,惩罚项权重越大。
为了测试逻辑回归中惩罚项 l1 和 l2 哪个好,采用 k 折交叉验证。
不能用测试数据来引导模型的训练。
将训练数据分成 k 份,每次将其中一份作为验证数据,用验证数据的准确率来衡量模型的好坏。
测试数据是为了验证模型不出现较大偏差。
以下为 4 折交叉验证: