06scikit-learn学习

06scikit-learn学习_第1张图片
image.png

基础

查看数据

from sklearn import datasets
iris = datasets.load_iris()
iris_X = iris.data
iris_y = iris.target
print(iris.keys())
print(iris.target,iris.target_names, iris.DESCR)#查看属性
 #Iris 数据有四个属性,花瓣的长宽,茎的长宽,根据这些属性把花分为三类

生成数据

#建立 100个sample,有一个feature和一个 target, noise 越大的话,点就越离散
X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=10)

模型调用

from sklearn import datasets
from sklearn.linear_model import LinearRegression
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target
model = LinearRegression()
model.fit(data_X, data_y)#训练
model.predict(data_X[:4, :])#预测
参数和分数
model.coef_ 和 model.intercept_ 属于 Model 的属性, 
对于 LinearRegressor 这个模型,这两个属性分别输出模型的斜率和截距
model.score(data_X, data_y) 它可以对 Model 用 R^2 的方式进行打分,输出精确度

进阶

模型检验概述

在神经网络的训练当中, 神经网络可能会因为各种各样的问题, 出现学习的效率不高, 学到最后并没有很好的学到规律 . 原因可能是多方面的, 数据问题, 学习效率 等参数问题.
训练数据和测试数据分开
为了检验,评价神经网络, 避免和改善这些问题, 通常会把收集到的数据分为训练数据 和测试数据, 一般用于训练的数据占总数据的70%, 剩下的30%拿来测试学习结果.要分开成两批?读书时的日子, 考试题和作业题大部分都是不一样的吧. 这也是同一个道理.
误差曲线、准确度曲线
除了误差曲线, 我们可以看他的精确度曲线. 最好的精度是趋向于100%精确. 比如在神经网络的分类问题中, 100个样本中, 我有90张样本分类正确, 预测精确度是90%.
回归的问题怎样看预测值是连续数字的精确度? 可以引用 R2 分数在测量回归问题的精度 . R2给出的最大精度也是100%, 所以分类和回归就都有的统一的精度标准. 除了这些评分标准, 还有很多其他的标准, 比如 F1 分数 , 用于测量不均衡数据的精度.
过拟合
有时明明每一道作业习题都会做, 可是考试分数为什么总是比作业分数低许多? 原来, 我们只复习了作业题,并没有深入, 拓展研究作业反映出来的知识. 这件事情发生在机器学习中, 就叫做过拟合. 神经网络虽然学习到了知识, 但是对于平时作业太过依赖, 到了考试的时候, 却不能随机应变, 没有成功的把作业的知识扩展开来. 在机器学习中, 解决过拟合也有很多方法 , 比如 l1, l2 正规化, dropout 方法.

模型检验方法

怎么确定神经网络那些参数能更有效的解决问题呢? 交叉验证可用于神经网络和其他机器学习方法的调参。 同样是选择想观看的误差值或者是精确度, 不过横坐标不再是学习时间,而是你要测试的某一参数 (比如说神经网络层数) . 逐渐增加神经层, 然后对于每一个不同层结构的神经网络求出最终的误差或精度, 画在图中. 神经层越多, 计算机所需要消耗的时间和资源就越多, 故只需要找到能满足误差要求, 有节约资源的层结构.
#1Model 基础验证法
#2Model 交叉验证法(Cross Validation)
#3K折交叉验证模块与准确率(accuracy)选择适当的K值
#4K折交叉验证模块与平均方差(Mean squared error)选择适当的K值

交叉验证
from sklearn.datasets import load_iris # iris数据集
from sklearn.model_selection import train_test_split # 分割数据模块
# K最近邻(kNN,k-NearestNeighbor)分类算法
from sklearn.neighbors import KNeighborsClassifier 


#加载iris数据集
iris = load_iris()
X = iris.data
y = iris.target
#分割数据并
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=4)
#建立模型
knn = KNeighborsClassifier()
#训练模型
knn.fit(X_train, y_train)
# 1Model 基础验证法,将准确率打印出
print(knn.score(X_test, y_test))# 0.973684210526
# 2Model 交叉验证法(Cross Validation)
from sklearn.model_selection import cross_val_score # K折交叉验证模块
#使用K折交叉验证模块
scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy')
#将5次的预测准确率打印出
print(scores)# [ 0.96666667  1.      0.93333333  0.96666667  1.        ]

#将5次的预测准确平均率打印出
print(scores.mean())# 0.973333333333

# 3以准确率(accuracy)判断
import matplotlib.pyplot as plt #可视化模块
#建立测试参数集
k_range = range(1, 31)
k_scores = []
#藉由迭代的方式来计算不同参数对模型的影响,并返回交叉验证后的平均准确率
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())

#可视化数据
plt.plot(k_range, k_scores)
plt.xlabel('Value of K for KNN')
plt.ylabel('Cross-Validated Accuracy')
plt.show()
# 选择12~18的k值最好。高过18之后,准确率开始下降则是因为过拟合
# (Over fitting)的问题。
# 4以平均方差(Mean squared error)
import matplotlib.pyplot as plt
k_range = range(1, 31)
k_scores = []
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    loss = -cross_val_score(knn, X, y, cv=10, scoring='neg_mean_squared_error')
    k_scores.append(loss.mean())

plt.plot(k_range, k_scores)
plt.xlabel('Value of K for KNN')
plt.ylabel('Cross-Validated MSE')
plt.show()
# 平均方差越低越好,因此选择13~18左右的K值会最好

模型保存

picker保存
import pickle #pickle模块
with open('save/clf.pickle', 'wb') as f:
    pickle.dump(clf, f)
with open('save/clf.pickle', 'rb') as f: #读取Model
    clf2 = pickle.load(f)#测试读取后的Model
    print(clf2.predict(X[0:1]))# [0]
jiblib保存
from sklearn import svm
from sklearn import datasets

# 添加gamma="scale",消除警告gamma will change from 'auto' to 'scale'
clf = svm.SVC(gamma="scale")
iris = datasets.load_iris()
X, y = iris.data, iris.target
clf.fit(X,y)
from sklearn.externals import joblib #jbolib模块
#保存Model(注:save文件夹要预先建立,否则会报错)
joblib.dump(clf, 'save/clf.pkl')
#读取Model
clf3 = joblib.load('save/clf.pkl')
#**模型生成和保存,模型调用,分两步来,把代码注释了看效果**

参考

莫烦Python

你可能感兴趣的:(06scikit-learn学习)