本文章主要记录学习sklearn笔记,分享出来,如有错误,欢迎指出
参考莫烦老师的sklearn教学视频整理的笔记,
相关链接如下:
Scikit-learn (sklearn) 优雅地学会机器学习
代码运行的python版本:3.7.1
使用jupyter notebook
流程:选择模型–fit–predict
选择模型:
导入模块和包
from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets.samples_generator import make_classification
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
加载数据
loaddata=datasets.load_boston()
data_X=loaddata.data
data_y=loaddata.target
#查看部分sample
data_X[:10,:]
#查看部分的target
data_y[:20]
加载数据格式 dataload=datasets.load_xx()
data表示样本,numpy.ndarray
target 表示数据结果(分类、回归等等)
在sklearn中有许多数据集 可以直接导入load 也可以使用代码随机产生
比如:
#创建regression数据
X,y=datasets.make_regression(n_samples=200,n_features=1,n_targets=1,noise=1)
plt.scatter(X,y)#查看数据 noise越小 代表数据越密集
X1,y1=datasets.make_regression(n_samples=200,n_features=1,n_targets=1,noise=10)
plt.scatter(X1,y1)
训练模型+预测模型
model=LinearRegression()
model.fit(data_X,data_y) #训练模型
#预测模型
pre=model.predict(data_X[:10,:]) #预测结果
print(pre)
data_y[:10] #真实结果
x=np.arange(10)
test=plt.scatter(x,pre)
plt.scatter(x,data_y[:10])
保存模型
#pickle
with open('save/clf.pickle','wb') as f:
pickle.dump(clf,f)
with open('save/clf.pickle','rb') as f:
clf2= pickle.load(f)
print(clf2.predict(X[:1]))
######restore方式
from sklearn.externals import joblib
joblib.dump(clf,'save/clf_restore.pkl')
clf3=joblib.load('save/clf_restore.pkl')
clf3.predict(X[:1])
*************************分割线
模型的属性参数
print(model.coef_,model.intercept_)
print(model.get_params)
print(model.score(data_X,data_y)) #使用真实数据对预测的数据进行打分
举例:y=0.1x+30
coef_ 表示0.1
model.intercept 表示与y轴的交点 30
特征缩放-归一化
from sklearn import preprocessing
import numpy as np
a=np.array([[10,2.7,3.6],
[-11,5,-2],
[120,20,40]])
a
preprocessing.scale(a)
交叉验证
#加载数据
iris=datasets.load_iris()
iris_X=iris.data #特征
iris_y=iris.target #目标
# print(iris_X[:5,:])
# print(iris_y) #每个花对应的类型
X_train,X_test,y_train,y_test=train_test_split(iris_X,iris_y,random_state=4)
knn=KNeighborsClassifier(n_neighbors=5) #临近的5个数据
scores=cross_val_score(knn,iris_X,iris_y,cv=5,scoring='accuracy')
scores.mean()
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')
k_scores.append(scores.mean())
plt.plot(k_range,k_scores)
cv=5,10 表示选择5,10次交叉验证
结束啦啦啦啦啦 ✿✿ヽ(°▽°)ノ✿ 下次再补充具体关于交叉验证的内容