SKlearn学习笔记~~基础部分01 总概

167 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Trick:纯demo,心在哪里,结果就在那里

 

# -*- coding: utf-8 -*-
# Author       :   szy
# Create Date  :   2019/10/28
 
"""
Actual value:真实值
Predicted value:预测值
Error:误差
损失函数 loss function
predictor 预示物
outcome 结果
回归平均值regression tothe mean
中心极限定理central limit theorem
最大似然估计maximum likelihood estimation,缩写为 MLE
mean squared error,最小二乘错误 缩写MSE
广义线性回归,General Linear Model
convex 凸面的
黑塞矩阵 hessian matrix
"""
"""
知识点1
通常来说, 机器学习的方法包括:
    监督学习 supervised learning;
    非监督学习 unsupervised learning;
    半监督学习 semi-supervised learning;
    强化学习 reinforcement learning;
    遗传算法 genetic algorithm.
Sklearn 包含了很多种机器学习的方式:
    Classification 分类
    Regression 回归
    Clustering 非监督分类
    Dimensionality reduction 数据降维
    Model Selection 模型选择
    Preprocessing 数据预处理
Sklearn 根据官网提供了一个流程图,算法有四类,分类,回归,聚类,降维。
    理解:从 START 开始,首先看数据的样本是否 >50,小于则需要收集更多的数据。
        分类和回归是监督式学习,即每个数据对应一个 label(标签)。
        聚类 是非监督式学习,即没有 label。
        降维,当数据集有很多很多属性的时候,可以通过 降维 算法把属性归纳起来。
            例如 20 个属性只变成 2 个,注意,这不是挑出 2 个,而是压缩成为 2 个,
            它们集合了 20 个属性的所有特征,相当于把重要的信息提取的更好,不重要的信息就不要了。
    然后看问题属于哪一类问题,是分类还是回归,还是聚类,就选择相应的算法。
    当然还要考虑数据的大小,例如 100K 是一个阈值。
    可以发现有些方法是既可以作为分类,也可以作为回归,
    例如 SGD(算法笔记之GD,BGD,SGD.地址https://blog.csdn.net/weixin_37805505/article/details/79147576)。
Sklearn通用学习模式:
    分类器:Sklearn 本身就有很多数据库,可以用来练习。 以 Iris 的数据为例,这种花有四个属性,
        花瓣的长宽,茎的长宽,根据这些属性把花分为三类。我们要用 分类器 去把四种类型的花分开。
用 KNN classifier,就是选择几个临近点,综合它们做个平均来作为预测值。
(KNN:近邻;最近邻;最近邻法;k最邻近;K邻近算法)
"""
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
#1.创建数据
# 加载 iris 的数据,把属性存在 X,类别标签存在 y:
iris = datasets.load_iris()
iris_X = iris.data
iris_y = iris.target
# ?观察一下数据集,X 有四个属性,y 有 0,1,2 三类
# print(iris_X[:2,:])
# print(iris_y)
"""
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
"""
# 把数据集分为训练集和测试集,其中 test_size=0.3,即测试集占总数据的 30%:
X_train, X_test, y_train, y_test = train_test_split(iris_X, iris_y, test_size=0.3)
# print(y_train)
"""
[1 2 2 0 0 0 0 2 0 2 2 0 2 2 1 0 2 2 0 1 2 0 0 0 0 2 2 0 1 2 1 0 1 0 0 2 1
 1 1 1 0 0 2 1 2 1 0 2 1 2 1 1 1 1 2 2 2 2 0 0 0 2 1 0 1 1 2 2 0 2 1 0 1 2
 1 1 1 2 0 1 0 1 0 1 1 1 2 0 2 2 0 0 1 1 2 2 0 0 2 1 2 1 1 1 1]
"""
 
#2.建立模型-训练-预测
# 定义模块方式 KNeighborsClassifier(),
# 用 fit 来训练 training data,这一步就完成了训练的所有步骤, 后面的 knn 就已经是训练好的模型,
# 可以直接用来 predict 测试集的数据, 对比用模型预测的值与真实的值,可以看到大概模拟出了数据,
# 但是有误差,是不会完完全全预测正确的。
knn = KNeighborsClassifier()
knn.fit(X_train,y_train)
# print(knn.predict(X_test))
# print(y_test)
"""
[0 0 0 1 2 0 1 1 2 0 0 0 2 1 2 1 2 0 2 1 0 1 2 2 1 2 1 1 1 1 0 2 1 0 0 0 2
 1 1 2 2 1 2 1 2]
[0 0 0 1 1 0 2 2 2 0 0 0 2 1 2 1 2 0 2 1 0 1 2 2 1 2 1 2 1 1 0 2 1 0 0 0 2
 1 1 2 2 1 2 1 2]
"""
"---------------------------------------------------------------------------"
"""
知识点2:
sklearn 强大数据库
要点:
    eg: boston 房价, 糖尿病, 数字, Iris 花。
    也可以生成虚拟的数据,例如用来训练   ~~线性回归模型~~   的数据,可以用函数来生成。
    如果是自己生成数据,按照函数的形式,输入 sample,feature,target 的个数等等。
    sklearn.datasets.make_regression(n_samples=100, n_features=100, n_informative=10, 
    n_targets=1, bias=0.0, effective_rank=None, tail_strength=0.5, noise=0.0, 
    shuffle=True, coef=False, random_state=None)[source]
"""
#1.导包
from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
#2.导入数据-训练模型
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target
#3.定义模型
# 可以直接用默认值去建立 model,默认值也不错,也可以自己改变参数使模型更好。 然后用 training data 去训练模型。
model = LinearRegression()
model.fit(data_X, data_y)
# 再打印出预测值,这里用 X 的前 4 个来预测,同时打印真实值,作为对比,可以看到是有些误差的。
# print(model.predict(data_X[:4, :]))
# print(data_y[:4])
"""
[30.00384338 25.02556238 30.56759672 28.60703649]
[24.  21.6 34.7 33.4]
"""
# 为了提高准确度,可以通过尝试不同的 model,不同的参数,不同的预处理等方法,入门的话可以直接用默认值
# 4.创建虚拟数据-可视化
# 用函数来建立 100 个 sample,有一个 feature,和一个 target,这样比较方便可视化。
X,y = datasets.make_regression(n_samples=100,n_features=1,n_targets=1,noise=10)
plt.scatter(X,y)
plt.show()
# noise 越大的话,点就会越来越离散,例如 noise 由 10 变为 50.
 
 
"-----------------------------------------------------------------------------------"
"""
知识点3:
1,sklearn 常用属性与功能
    上面学了 Sklearn 中的 data sets,再来看 Model 的属性和功能。
    以 LinearRegressor 为例,所以先导入包,数据,还有模型。
"""
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()
"""
2,sklearn训练和预测
    接下来 model.fit 和 model.predict 就属于 Model 的功能,用来训练模型,用训练好的模型预测。
"""
model.fit(data_X, data_y)
# print(model.predict(data_X[:4, :]))
#[ 30.00821269  25.0298606   30.5702317   28.60814055]
"""
3,参数和分数
    model.coef_ 和 model.intercept_ 属于 Model 的属性,
    例如对于 LinearRegressor 这个模型,这两个属性分别输出模型的斜率和截距(与y轴的交点)
    
    model.get_params() 也是功能,它可以取出之前定义的参数。
    
    model.score(data_X, data_y) 它可以对 Model 用 R^2 的方式进行打分,输出精确度。
  
"""
# print(model.coef_)
# print(model.intercept_)
"""
    [ -1.07170557e-01   4.63952195e-02   2.08602395e-02   2.68856140e+00
      -1.77957587e+01   3.80475246e+00   7.51061703e-04  -1.47575880e+00
       3.05655038e-01  -1.23293463e-02  -9.53463555e-01   9.39251272e-03
      -5.25466633e-01]
    36.4911032804
"""
# print(model.get_params())
"""
{'copy_X': True, 'fit_intercept': True, 'n_jobs': None, 'normalize': False}
"""
print(model.score(data_X, data_y))
"""
0.7406426641094094
"""