pip install scikit-learn
适用算法一:k邻算法
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=5) # n_neighbors=5 为考虑最邻近的5个点,默认为 5
适用算法二:支持向量机(SVC)
from sklearn.svm import SVC
适用算法一:线性回归法
from sklearn.linear_model import LinearRegression
适用算法二:支持向量机(SVR)
from sklearn.svm import SVR
前言:库依赖
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 = 你要训练的数据集(特征集) 类型为: 多维数组
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为特征值,要和训练时的一样
print(model.get_params()) # 打印模型方法的参数设置情况
(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随着训练集规模在下降
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()
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 ]]