一、sklearn库安装

pip install scikit-learn

二、认识(四大学习)

1、分类学习(classification),属于监督型

适用算法一:k邻算法

from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=5) # n_neighbors=5 为考虑最邻近的5个点,默认为 5

适用算法二:支持向量机(SVC)

from sklearn.svm import SVC

2、回归学习(regression),属于监督型

适用算法一:线性回归法

from sklearn.linear_model import LinearRegression

适用算法二:支持向量机(SVR)

from sklearn.svm import SVR

3、聚类学习(clustering),不属于监督型

4、降维学习(dimensionality reduction)不属于监督型

三、分类学习代码示范

前言:库依赖

import numpy as np
import pickle    # 用于保存训练模型,方便换机进行商业使用
from sklearn import datasets   # 有着各种现成的数据
from sklearn.model_selection import train_test_split  # 将数据分成训练和测试两部分
from sklearn.neighbors import KNeighborsClassifier    # k邻算法的分类学习

1、定义:输入值集 X 输出值(结果值) Y

iris = datasets.load_iris()   # 调用数据,我这直接使用sklearn库中现成的数据,自备数据可省略这步
X = iris.data   # X = 你要训练的数据集(特征集)  类型为:<class 'numpy.ndarray'> 多维数组
Y = iris.target  # Y = 结果集  类型为:一维数组
# 注意: len(X)==len(Y) 即:一个数字特征对应一个结果,确保数据真实一一对应

2、将输入值集 X和输出值Y的数据分成训练和测试两部分

X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.3) # test_size=0.3为测试占3成
# 注意:返回的结果已经是打乱了的数据:X_train、Y_train为训练集,X_test、Y_test为测试集

3、算法选择+模型训练

model = KNeighborsClassifier()    # 这以 k邻算法 为例,可尝试其他算法
model.fit(X_train,Y_train)   # 模型训练

4、预测结果比较评估

predict_result = model.predict(X_test) # predict_result为预测集X_test的预测结果,Y_test为真实结果

5、训练模型保存

pickle.dump(model,open('clf.weights','wb'))

6、模型移植使用

import pickle
model = pickle.load(open('clf2.weights','rb'))
predict_result = model.predict(X_test)   # X_test为特征值,要和训练时的一样

四、结果查看

1、model相关功能

print(model.get_params())   # 打印模型方法的参数设置情况

2、模型打分

(1)标准打分

score = model.score(X_test,Y_test) # 给模型打分,预测的准确率

#在 LinearRegression() 线性回归中:score 为 R^2
#在 KNeighborsClassifier() k邻算法中:score 为准确率

(2)交叉验证打分

1、准确率

from sklearn.model_selection import cross_val_score
score = cross_val_score(model, # 使用的模型
                      X,  # 没被分割原来的所有输入值 X
                      Y,  # 没被分割原来的所有输出值 Y
                      cv=5,  # 5次不同地方分割的交叉验证
                      scoring='accuracy'  # 查看准确率
                      ).mean()   # 取均值,没mean()则为5个准确率的数组

2、误差loss

loss = cross_val_score(model, # 使用的模型
                      X,  # 没被分割原来的所有输入值 X
                      Y,  # 没被分割原来的所有输出值 Y
                      cv=5,  # 5次不同地方分割的交叉验证
                      scoring='neg_mean_squared_error'
                      ).mean() # 取均值,没mean()则为5个误差的数组

3、画图可视化,方便调参
(1) loss随着训练集规模变化

import matplotlib.pyplot as plt
from sklearn.svm import SVC
import numpy as np
from sklearn.model_selection import learning_curve      # 用数据量来查看变化
# train_sizes:训练集大小的数组
#train_loss:训练的误差数组
#test_loss:测试的误差数组
train_sizes,train_loss,test_loss = learning_curve(SVC(gamma=0.001), # 使用的模型
                             X,  # 没被分割原来的所有输入值 X
                             Y,  # 没被分割原来的所有输出值 Y
                             cv=10, # 10次不同地方分割的交叉验证
                             scoring='neg_mean_squared_error', #查看误差
                             train_sizes=[0.1,0.25,0.5,0.75,1] # 设置训练的规模变化
                             )
train_loss_mean = -np.mean(train_loss,axis=1) # 取均值
plt.plot(train_sizes,train_loss_mean,'o-',color='r',label='Training')  # 画折线图
plt.show()

*loss随着训练集规模在下降


(2) 在支持向量机模型中,loss随着gamma值变化

import matplotlib.pyplot as plt
from sklearn.svm import SVC
import numpy as np
from sklearn.model_selection import validation_curve   # 用模型参数来查看变化
gamma_range = np.logspace(-5,-1.2,4)    
# 对数分度向量[1.00000000e-05 1.84784980e-04 3.41454887e-03 6.30957344e-02]
train_loss,test_loss = validation_curve(SVC(),
                             X,
                             Y,
                             param_name='gamma',  # 模型中变化的对象名
                             param_range=gamma_range,   # 对象变化范围
                             cv=10,
                             scoring='neg_mean_squared_error',
                             )
train_loss_mean = -np.mean(train_loss,axis=1) # 取均值
plt.plot(gamma_range,train_loss_mean,'o-',color='r',label='Training')  # 画折线图
plt.ylabel('loss')
plt.xlabel('gamma')
plt.show()

*loss随着gamma在下降

拓展:数据预处理

1、查看是否有空值

df = pd.read_csv('xxx.csv')
print(df.info())   

2、标准化

from sklearn import preprocessing
import numpy as np
a = np.array([[-1,2.3,-24],
            [10,5,14],
            [120,20,50]],dtype=np.float64)
b = preprocessing.scale(a)    # 缩小各列跨度,范围为-2 ~ 2
# b = preprocessing.minmax_scale(a,feature_range=(0,1)) # 可设置范围 0 ~ 1

b 为
[[-0.80538727 -0.87337538 -1.23562819]
[-0.60404045 -0.52659398 0.02206479]
[ 1.40942772 1.39996936 1.2135634 ]]

更多推荐

sklearn库机器学习python使用教程:学完这一篇即巅峰