机器学习的5个步骤
1)特征工程
2)Train和Test数据分割
3)模型训练
4)预测
5)交叉验证
6)搜索最优参数
我们以处理鸢花尾数据为例进行学习
首先是加载项
from __future__ import print_function
# 预先配置好的鸢尾花数据集
from sklearn.datasets import load_iris
# 交叉验证,将训练集重复分配,防止分配和测试训练集的方法问题导致对模型训练的影响
from sklearn.cross_validation import train_test_split
# 最近临分配器做预测
from sklearn.neighbors import KNeighborsClassifier
# 做一个特征工程,将特征两两组合,扩充出来更多的特征
from sklearn.preprocessing import PolynomialFeatures
第一步 特征工程
# 加载数据集
# 数据集每一列代表花瓣,花萼的长度和宽度
iris = load_iris()
# 花的数据特征
x = iris.data
# 预测的花的类别
y = iris.target
print(x,y)
# degree = 2,将任意两个特征做两两组合
# 做特征工程,扩充现有的属性,帮助做后续预测
poly = PolynomialFeatures(3)
x_Poly = poly.fit_transform(x)
print(x_Poly)
第二步
# x_train,y_train用于训练模型,x_test,y_test用于做测试
# x_train,x_test,y_train,y_test = train_test_split(x,y,random_state = 4)
x_train,x_test,y_train,y_test = train_test_split(x_Poly,y,random_state = 4)
第三步
# 最近邻,设定一个步长(这里设置为5),计算距离当前点最近的5个邻居点
# 类别占比最高点的即认为是当前点为最佳预测
knn = KNeighborsClassifier(n_neighbors = 5)
knn.fit(x_train,y_train)
第四步
# y_pred是预测值,y_test是真实值
y_pred = knn.predict(x_test)
print(y_pred)
print(y_test)
# 预测值越贴近真实值,说明误差越低,分类器效果越好
print(knn.score(x_test,y_test))
第五步
from sklearn.cross_validation import cross_val_score
knn = KNeighborsClassifier(n_neighbors = 5)
scores = cross_val_score(knn,x,y,cv = 5,scoring = 'accuracy')
print(scores)
第六步
from sklearn.cross_validation import cross_val_score
import matplotlib.pyplot as plt
k_range = range(1, 31)
k_scores = []
# 对k值分别进行实验,选择结果较好的
for k in k_range:
knn = KNeighborsClassifier(n_neighbors = k)
scores = cross_val_score(knn,x,y,cv = 10 ,scoring = 'accuracy')
k_scores.append(scores.mean())
# print(k_scores)
plt.plot(k_range,k_scores)
plt.xlabel('Value of K for KNN')
plt.ylabel('Cross-Validated Accuracy')
# 得分高的参数较优
plt.show()