scikit-learn学习笔记-bili莫烦
bilibili莫烦scikit-learn视频学习笔记
1.使用KNN对iris数据分类
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier # 从datasets中导入iris数据,包含150条样本,每条样本4个feature
iris_data = datasets.load_iris()
# 获取feature
iris_x = iris_data.data
# 获取标签
iris_y = iris_data.target
print(iris_x.shape)
print(iris_y)
# 将数据集分为训练集和测试集,比例是70%:30%
train_x, test_x, train_y, test_y = train_test_split(iris_x, iris_y, test_size=0.3)
# 使用knn分类器(n_neighbors表示通过附近的几个邻居来确定分类,一般为单数)
knn = KNeighborsClassifier(n_neighbors = 5)
# 训练
knn.fit(train_x, train_y)
# 测试
print(knn.predict(test_x))
print(test_y)
2.使用线性回归预测Boston房价
from sklearn import datasets
from sklearn.linear_model import LinearRegression # 从datasets中载入Boston房价数据集
loaded_data = datasets.load_boston()
# 包含506条样本,每条样本13个feature
data_x = loaded_data.data
# 标签,即房价(万)
data_y = loaded_data.target # 线性回归器
lr = LinearRegression()
# 训练
lr.fit(data_x, data_y)
# 预测前6条样本的房价
print(lr.predict(data_x[:6, :]))
# 与标签对比,可以看出准确度
print(data_y[:6])
3.如何创建线性数据(实验数据)
from sklearn import datasets
import matplotlib.pyplot as plt # 使用make_regression函数生成线性回归数据集,100个样本,1个feature,noise控制噪声即偏移度
made_data_x, made_data_y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=30)
# 使用matplotlib画散点图
plt.scatter(made_data_x, made_data_y)
# 显示图像
plt.show() # 使用线性回归器来进行训练和预测
lr = LinearRegression()
lr.fit(made_data_x, made_data_y)
print(lr.predict(made_data_x[:5, :]))
print(made_data_y[:5])
# 打印学习到的参数集,y = wx + b
print(lr.coef_) # output w,w是一个向量,数量和n_features一致
print(lr.intercept_) # output b,b即bias
4.输出模型的一些参数
# 打印学习到的参数集,y = wx + b
print(lr.coef_) # output w,w是一个向量,数量和n_features一致,w = [28.44936087]
print(lr.intercept_) # output b,b即bias = -2.787101732423871
# 打印LinearRegression的参数值,未手工设置则打印默认参数
print(lr.get_params()) # 打印{'copy_X': True, 'fit_intercept': True, 'n_jobs': 1, 'normalize': False}
# 使用数据进行测试,并打分,在回归中使用R^2 coefficient of determination
print(lr.score(test_x, test_y))
5.使用SVC进行分类(数据伸缩)
import numpy as np
import matplotlib.pyplot as plt from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.datasets.samples_generator import make_classification
# 从svm模块中导入support vector classifier
from sklearn.svm import SVC # 创建数据集
X, y = make_classification(n_samples=3000, n_features=2, n_redundant=0, n_informative=2, random_state=22,
n_clusters_per_class=1, scale=100)
# 画图c=y的意思是颜色根据y来区分
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show() # 将数据伸缩为[0,1]
scales_x = preprocessing.scale(X)
# 伸缩后的数据方差为1.0
print(np.std(scales_x)) # 使用SVC分类器分类
train_x, test_x, train_y, test_y = train_test_split(scales_x, y, test_size=0.3)
model = SVC()
model.fit(train_x, train_y)
# 模型分类准确率大概为0.90
print(model.score(test_x, test_y))


6.KNN分类iris,交叉验证,参数选择并可视化
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
# 导入交叉验证
from sklearn.model_selection import cross_val_score # 从datasets中导入iris数据,包含150条样本,每条样本4个feature
iris_data = datasets.load_iris()
iris_x = iris_data.data
iris_y = iris_data.target # 尝试n_neighbors为不同值时,模型准确度
nb = range(1, 31)
# 保存每次n_neighbors对应准确率,用于plt画图
k_scores = []
for k in nb:
# 使用KNN模型
knn = KNeighborsClassifier(n_neighbors=k)
# 使用交叉验证,不需要自己去切分数据集,也不需要knn.fit()和knn.predict(),cv=5表示交叉验证5组
scores = cross_val_score(knn, iris_x, iris_y, cv=5, scoring='accuracy')
# 取交叉验证集的平均值
k_scores.append(scores.mean()) # 画出n_neighbor于accuracy的关系图
plt.plot(nb,k_scores)
plt.xlabel("Value of n_neighbors")
plt.ylabel("Value of Accuracy")
plt.show()

7.使用交叉验证,并画出学习曲线learning_curve,用于观察模型拟合情况
import numpy as np
import matplotlib.pyplot as plt # 导入sklearn提供的损失曲线
from sklearn.model_selection import learning_curve
from sklearn.datasets import load_digits
from sklearn.svm import SVC # 导入数据
digits = load_digits()
X = digits.data
y = digits.target # 使用学习曲线获取每个阶段的训练损失和交叉测试损失,train_sizes表示各个不同阶段,从10%到100%
train_sizes, train_loss, test_loss = learning_curve(
SVC(gamma=0.001), X, y, cv=10, scoring='neg_mean_squared_error',
train_sizes=np.linspace(0.1, 1, 10)
) # 将每次训练集交叉验证(10个损失值,因为cv=10)取平均值
train_loss_mean = -np.mean(train_loss, axis=1)
print(train_loss_mean)
# 将每次测试集交叉验证取平均值
test_loss_mean = -np.mean(test_loss, axis=1)
print(test_loss_mean)
# 画图,红色是训练平均损失值,绿色是测试平均损失值
plt.plot(train_sizes, train_loss_mean, 'o-', color='r', label='Training')
plt.plot(train_sizes, test_loss_mean, 'o-', color='g', label='Cross_validation')
plt.xlabel('Train sizes')
plt.ylabel('Loss')
plt.show()

8.使用交叉验证,并画出验证曲线validation_curve,用于观察模型参数不同时的准确率
import numpy as np
import matplotlib.pyplot as plt # 导入sklearn提供的验证曲线
from sklearn.model_selection import validation_curve
from sklearn.datasets import load_digits
from sklearn.svm import SVC # 导入数据
digits = load_digits()
X = digits.data
y = digits.target # SVC参数gamma的范围
param_range = np.logspace(-6, -2.3, 5) # 使用validation曲线,指定params的名字和范围
train_loss, test_loss = validation_curve(
SVC(), X, y, param_name='gamma', param_range=param_range, cv=10, scoring='neg_mean_squared_error'
) # 将每次训练集交叉验证(10个损失值,因为cv=10)取平均值
train_loss_mean = -np.mean(train_loss, axis=1)
print(train_loss_mean)
# 将每次测试集交叉验证取平均值
test_loss_mean = -np.mean(test_loss, axis=1)
print(test_loss_mean)
# 画图,红色是训练平均损失值,绿色是测试平均损失值,注意这里的x坐标是param_range
plt.plot(param_range, train_loss_mean, 'o-', color='r', label='Training')
plt.plot(param_range, test_loss_mean, 'o-', color='g', label='Cross_validation')
plt.xlabel('Gamma')
plt.ylabel('Loss')
plt.show()

9.使用pickle保存模型到文件
import pickle
from sklearn.datasets import load_iris
from sklearn.svm import SVC iris = load_iris()
X = iris.data
y = iris.target # # 使用SVC模型
# model = SVC()
# # 训练模型
# model.fit(X,y)
# # 使用pickle保存模型到文件中
# with open('save/model.pickle','wb') as fp:
# pickle.dump(model,fp) # 从文件中load模型
with open('save/model.pickle', 'rb') as fp:
model_read = pickle.load(fp) # 使用load出的模型预测
print(model_read.predict(X[0:1]))
10.使用joblib保存模型到文件
from sklearn.datasets import load_iris
from sklearn.svm import SVC
# 导入外部模块中得joblib用于存储模型
from sklearn.externals import joblib iris = load_iris()
X = iris.data
y = iris.target # # 使用SVC模型
# model = SVC()
# # 训练模型
# model.fit(X,y)
# # 使用joblib存放模型到model.jl中
# joblib.dump(model,'save/model.jl') # 从model.jl中读取模型
model_read = joblib.load('save/model.jl')
# 用load的模型预测
print(model_read.predict(X[0:1]))
scikit-learn学习笔记-bili莫烦的更多相关文章
- tensorflow学习笔记-bili莫烦
bilibili莫烦tensorflow视频教程学习笔记 1.初次使用Tensorflow实现一元线性回归 # 屏蔽警告 import os os.environ[' import numpy as ...
- keras学习笔记-bili莫烦
一.keras的backend设置 有两种方式: 1.修改JSON配置文件 修改~/.keras/keras.json文件内容为: { "iamge_dim_ordering":& ...
- 机器学习-scikit learn学习笔记
scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...
- Learning How to Learn学习笔记(转)
add by zhj: 工作中提高自己水平的最重要的一点是——快速的学习能力.这篇文章就是探讨这个问题的,掌握了快速学习能力的规律,你自然就有了快速学习能力了. 原文:Learning How to ...
- 【pytorch】学习笔记(二)- Variable
[pytorch]学习笔记(二)- Variable 学习链接自莫烦python 什么是Variable Variable就好像一个篮子,里面装着鸡蛋(Torch 的 Tensor),里面的鸡蛋数不断 ...
- 稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记。
稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记. 还有 google 在 udacity 上的 CNN 教程. CNN(Convolutional Neural Networks) 卷积神经网络简单 ...
- 莫烦大大TensorFlow学习笔记(9)----可视化
一.Matplotlib[结果可视化] #import os #os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf i ...
- 莫烦pytorch学习笔记(八)——卷积神经网络(手写数字识别实现)
莫烦视频网址 这个代码实现了预测和可视化 import os # third-party library import torch import torch.nn as nn import torch ...
- 莫烦pytorch学习笔记(七)——Optimizer优化器
各种优化器的比较 莫烦的对各种优化通俗理解的视频 import torch import torch.utils.data as Data import torch.nn.functional as ...
随机推荐
- 0-1分布(伯努利分布)、n 重伯努利分布(二项分布)
1. 0-1 分布(伯努利分布) 0-1分布又名两点分布,或叫伯努利分布. P{X=k}=pk(1−p)1−k 其中 k=0,1. 伯努利分布未必一定是 0-1 分布,也可能是 a-b 分布,只需满足 ...
- R 语言学习(二)—— 向量
1. 入门 将摄氏度转化为华氏度 >> 27*1.8+32 [1] 80.6 [1]:表示数字的向量索引号,在 R 语言中任何一个数字都看作一个向量. 向量化 >> temp ...
- C++使用Windows API CreateMutex函数多线程编程
C++中也可以使用Windows 系统中对应的API函数进行多线程编程.使用CreateThread函数创建线程,并且可以通过CreateMutex创建一个互斥量实现线程间数据的同步: #includ ...
- SQL Server 2017 正式发布:同时支持 Windows 和 Linux(现在看下来,当年那德拉的“云优先,移动优先”是有远见的,而且是有一系列的措施和产品相配合的,只是需要一点时间而已。真是佩服!!)
微软在去年 3 月首次对外宣布了 Linux 版的 SQL Server,并于今年 7 月发布了首个公开 RC 版.前几日在美国奥兰多召开的微软 Ignite 2017 大会上,微软宣布 SQL Se ...
- 张忠谋:3nm制程会出来 2nm后很难(摩尔定律还可维持10年)
集微网消息,台积电董事长张忠谋表示,摩尔定律可能还可再延续10年,3nm制程应该会出来,2nm则有不确定性,2nm之后就很难了. 张忠谋表示,1998年英特尔总裁贝瑞特来台时,两人曾针对摩尔定律还可延 ...
- css 浏览器兼容性问题解决
一个.!important (功能有限) 随着IE7正确!important支持, !important 方法现在只IE6兼容.(注意措辞.我记得这句话需要推进的位置.) : #example ...
- Why aren't more desktop apps written with Qt?(quora.com系列文章)
As far as I know and have understood in my experience with Qt, it's a very good and easy to learn li ...
- 2-19-使用apache搭建web网站
1 搭建一台测试web服务器 案例: 部门内部搭建一台WEB服务器,采用的IP地址和端口为192.168.10.34:80,首页采用index.html 文件.管理员E-mail地址为 xuegod@ ...
- Visifire charts ToolBar
<charts:Chart x:Name="ChartPat" Theme="Theme2" BorderBrush="Gray" P ...
- passed into methods by value java专题
java没有引用传递只有按值传递,没有引用传递只有按值传递,值传递.因为Primitive类型的值不能改变,所以method不能更改调用方传的primitive 值.因为method更改的是Primi ...