数据建模五大步(以KNeighborsClassifier算法为主)

'''
    KNeighborsClassifier
'''
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import pickle       #pickle模块
from sklearn.externals import joblib    #jbolib模块
from sklearn import preprocessing       #标准化数据模块
from sklearn.cross_validation import cross_val_score # K折交叉验证模块
import matplotlib.pyplot as plt


# 第一步: 加载数据集
iris = datasets.load_iris()            # 加载数据集
iris_X = iris.data
iris_y = iris.target

# 自己制造数据 *** make_XXX
X, y = datasets.make_classification(n_samples=300, n_features=2, n_redundant=0,
    n_informative=2, random_state=22, n_clusters_per_class=1, scale=100)
# X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=10)


# 第二步: 数据集标准化, 划分测试集、训练集
iris_X = preprocessing.scale(iris_X)    # 标准化数据
# 随机划分训练集和测试集 7:3
X_train, X_test, y_train, y_test = train_test_split(
                iris_X, iris_y, test_size=0.3, random_state=0)


# 第三步: 训练模型
knn = KNeighborsClassifier(n_neighbors=5)            # 训练模型
knn.fit(X_train, y_train)
print(knn.predict(X_test))            # 利用模型做预测
print(y_test)
print(knn.score(X_test, y_test))      # 模型打分

scores = cross_val_score(knn, iris_X, iris_y, cv=5, scoring='accuracy')
print(scores.mean())                # 使用K折交叉验证模块


# 第四步:建立测试参数集,调参,优化模型
k_range = range(1, 31)
k_scores = []

#藉由迭代的方式来计算不同参数对模型的影响,并返回交叉验证后的平均准确率
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    scores = cross_val_score(knn, iris_X, iris_y, cv=10, scoring='accuracy')     # 分类
    # loss = -cross_val_score(knn, X, y, cv=10, scoring='mean_squared_error')    # 回归
    k_scores.append(scores.mean())

#可视化数据
plt.plot(k_range, k_scores)
plt.xlabel('Value of K for KNN')
plt.ylabel('Cross-Validated Accuracy')
plt.show()


# 第五步: 保存模型
# 保存Model 方法一:(:save文件夹要预先建立,否则会报错)  pickle 方法
with open('Model/Pickle/KNeighborsClassifier.pickle', 'wb') as f:
    pickle.dump(knn, f)

#读取Model
with open('Model/Pickle/KNeighborsClassifier.pickle', 'rb') as f:
    clf2 = pickle.load(f)
    print(clf2.predict(iris_X))         #测试读取后的Model


#保存Model 方法二:(:save文件夹要预先建立,否则会报错) joblib 方法  优点:效率高
joblib.dump(knn, 'Model/Joblib/KNeighborsClassifier.pkl')

#读取Model
clf3 = joblib.load('Model/Joblib/KNeighborsClassifier.pkl')
print(clf3.predict(iris_X))           #测试读取后的Model

猜你喜欢

转载自blog.csdn.net/luzaofa/article/details/80357795