2021-07-22

自学笔记:
Plt.rcParams()详解:
首先matplotlib通过rc配置文件来自定义图形的各种默认属性,称之为rc配置,或者rc参数。通过rc参数,可以修改默认的属性。
序号 属性 说明
1 plt.rcParams[’axes.unicode_minus’] = False 字符显示
2 plt.rcParams[’font.sans-serif’] = ‘SimHei’ 设置字体
线条样式:lines
3 plt.rcParams[’lines.linestyle’] = ‘-.’ 线条样式
4 plt.rcParams[’lines.linewidth’] = 3 线条宽度
5 plt.rcParams[’lines.color’] = ‘blue’ 线条颜色
6 plt.rcParams[’lines.marker’] = None 默认标记
7 plt.rcParams[’lines.markersize’] = 6 标记大小
8 plt.rcParams[’lines.markeredgewidth’] = 0.5 标记附近的线宽
横、纵轴:xtick、ytick
9 plt.rcParams[’xtick.labelsize’] 横轴字体大小
10 plt.rcParams[’ytick.labelsize’] 纵轴字体大小
11 plt.rcParams[’xtick.major.size’] x轴最大刻度
12 plt.rcParams[’ytick.major.size’] y轴最大刻度
figure中的子图:axes
13 plt.rcParams[’axes.titlesize’] 子图的标题大小
14 plt.rcParams[’axes.labelsize’] 子图的标签大小
图像、图片:figure、savefig
15 plt.rcParams[’figure.dpi’] 图像分辨率
16 plt.rcParams[’figure.figsize’] 图像显示大小
17 plt.rcParams[’savefig.dpi’] 图片像素

第二个中:
.shape()函数是numpy中的函数,功能是读取矩阵的长度,如shap[0]表示读取矩阵的第一维度的长度。
shape的输入参数可以是一个整数(表示维度),也可以是一个矩阵。
使用shape()函数可以快速地读取矩阵的形状。

一般将学习器的实际预测输出,与样本的真实输出之间的差异称为误差。
首先用留出法:留出法是最常用,最直接最简单的方法,它直接将数据集D拆分成两个沪指的集合,其中一个作为训练集R,另一个作为测试集T。
D = S∪T,S∩T=空集
使用python实现留白的方法:只需要使用sklearn包就可以了
From sklearn。Model_selection import train_text_split
#使用train_text_split来划分训练集和测试集
Train_X,test_X,train_X,test_Y = train_text_split(X,Y,test_size = 0.2,random_state = 0)
对于参数train_test_split参数含义:
首先,在机器学习中,我们通常将原始数据分割为测试集和训练集。
我们首先应该从sklearn.model_selection中调用train_test_split函数,然后,运用函数,将我们的数据集进行分割,
X_train,X_test,Y_train,Y_test = sklearn.train_test_split(train_data,train_target,test_size = 0.2,random_state = 0,stratify = y_train)
Train_data :要划分的样本特征集;
Train_target:所要划分的样本结果。
Test_size:样本占比,如果是整数的话就是样本的数量。
Random_state:随机数的种子。就是该组随机数的编号,在需要重复实验的时候,保证得到的一组一样的随机数,比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
Stratify:保持测试集与整个数据集里result的数据分类比例一致。
但是真正的原理并没有懂。如何进行分配,不明白。(一般传入因变量所在的列)
回归算法之非线性回归 - 知乎 (zhihu.com)

Logisticregression函数的参数说明:
Logistics Regression参数名称
函数调用形式
LogisticRegression(penalty=‘l2’,dual=False,tol=1e-4,C=1.0,fit_intercept=True,intercept_scaling=1,class_weight=None,random_state=None,solver=‘liblinear’,max_iter=100,multi_class=‘ovr’,verbose=0,warm_start=False, n_jobs=1)
penalty
字符串型,’l1’ or ‘l2’,默认:’l2’;正则化类型。
dual
布尔型,默认:False。当样本数>特征数时,令dual=False;用于liblinear解决器中L2正则化。
tol
浮点型,默认:1e-4;迭代终止判断的误差范围。
C
浮点型,默认:1.0;其值等于正则化强度的倒数,为正的浮点数。数值越小表示正则化越强。
fit_intercept
布尔型,默认:True;指定是否应该向决策函数添加常量(即偏差或截距)。
intercept_scaling
浮点型,默认为1;仅仅当solver是”liblinear”时有用。
class_weight
默认为None;与“{class_label: weight}”形式中的类相关联的权重。如果不给,则所有的类的权重都应该是1。
random_state
整型,默认None;当“solver”==“sag”或“liblinear”时使用。在变换数据时使用的伪随机数生成器的种子。如果是整数, random_state为随机数生成器使用的种子;若为RandomState实例,则random_state为随机数生成器;如果没有,随机数生成器就是’ np.random ‘使用的RandomState实例。
solver
{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’},默认: ‘liblinear’;用于优化问题的算法。
对于小数据集来说,“liblinear”是个不错的选择,而“sag”和’saga’对于大型数据集会更快。
对于多类问题,只有’newton-cg’, ‘sag’, ‘saga’和’lbfgs’可以处理多项损失;“liblinear”仅限于“one-versus-rest”分类。
max_iter
最大迭代次数,整型,默认是100;
multi_class
字符串型,{ovr’, ‘multinomial’},默认:‘ovr’;如果选择的选项是“ovr”,那么一个二进制问题适合于每个标签,否则损失最小化就是整个概率分布的多项式损失。对liblinear solver无效。
verbose
整型,默认是0;对于liblinear和lbfgs solver,verbose可以设为任意正数。
warm_start
布尔型,默认为False;当设置为True时,重用前一个调用的解决方案以适合初始化。否则,只擦除前一个解决方案。对liblinear解码器无效。
n_jobs
整型,默认是1;如果multi_class=‘ovr’ ,则为在类上并行时使用的CPU核数。无论是否指定了multi_class,当将’ solver ’ '设置为’liblinear’时,将忽略此参数。如果给定值为-1,则使用所有核。

第三章 模型搭建和评估–建模
经过前面的两章的知识点的学习,我可以对数数据的本身进行处理,比如数据本身的增删查补,还可以做必要的清洗工作。那么下面我们就要开始使用我们前面处理好的数据了。这一章我们要做的就是使用数据,我们做数据分析的目的也就是,运用我们的数据以及结合我的业务来得到某些我们需要知道的结果。那么分析的第一步就是建模,搭建一个预测模型或者其他模型;我们从这个模型的到结果之后,我们要分析我的模型是不是足够的可靠,那我就需要评估这个模型。今天我们学习建模,下一节我们学习评估。

我们拥有的泰坦尼克号的数据集,那么我们这次的目的就是,完成泰坦尼克号存活预测这个任务。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.display import Image
%matplotlib inline
cParams[
plt.rcParams[‘font.sans-serif’] = [‘SimHei’] # 用来正常显示中文标签
plt.rcParams[‘axes.unicode_minus’] = False # 用来正常显示负号
plt.rcParams[‘figure.figsize’] = (10, 6) # 设置输出图片大小
载入这些库,如果缺少某些库,请安装他们

【思考】这些库的作用是什么呢?你需要查一查

numpy的作用:能够直接对数组和矩阵进行操作,可以省略很多的循环语句;数组的存储效率和输入输出功能远远优于python中的基本数据结构;Numpy大部分是由C来编写的,比python代码更高效。
#思考题回答
pandas库是一个强大的分析结构化数据的工具集,它使用的基础是numpy;用于数据挖掘和数据分析。同时也提供数据清洗。
numpy的作用:能够直接对数组和矩阵进行操作,可以省略很多的循环语句;数组的存储效率和输入输出功能远远优于python中的基本数据结构;Numpy大部分是由C来编写的,比python代码更高效。

%matplotlib inline
载入我们提供清洗之后的数据(clear_data.csv),大家也将原始数据载入(train.csv),说说他们有什么不同

大小,第一个参数是宽,第二个参数是长。
#写入代码
#使用.rcParams()函数,rc文件来配置图像的默认属性。
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]#用来设置字体
plt.rcParams[‘axes.unicode_minus’] = False #用来正常显示字符(字符显示)。正常显示符号
plt.rcParams[‘figure.figsize’] = (8,7)#用来显示图像的大小,第一个参数是宽,第二个参数是长。

#写入代码
import pandas as pd
#载入已经清理完成的文件
data_clean = pd.read_csv(“clear_data.csv”)
#载入未清洗的原始文件
data_original = pd.read_csv(“train.csv”)
()
#写入代码
#用来读取文件的矩阵的形状究竟是什么样的矩阵。(读取原数据集)
data_clean.shape
data_original.shape
#在终端显示:
data_clean.head()
data_original()

模型搭建

  • 处理完前面的数据我们就得到建模数据,下一步是选择合适模型
  • 在进行模型选择之前我们需要先知道数据集最终是进行监督学习还是无监督学习
  • 模型的选择一方面是通过我们的任务来决定的。
  • 除了根据我们任务来选择模型外,还可以根据数据样本量以及特征的稀疏性来决定
  • 刚开始我们总是先尝试使用一个基本的模型来作为其baseline,进而再训练其他模型做对比,最终选择泛化能力或性能比较好的模型
    这里我的建模,并不是从零开始,自己一个人完成完成所有代码的编译。我们这里使用一个机器学习最常用的一个库(sklearn)来完成我们的模型的搭建

下面给出sklearn的算法选择路径,供大家参考

sklearn模型算法选择路径图

Image(‘sklearn.png’)

【思考】数据集哪些差异会导致模型在拟合数据是发生变化

#思考回答
通过比较以上4个数据集的差异,简单地总结:当需要试验较大量的数据时,我们可以想到「Adult」;
当想研究变量之间的相关性时,我们可以选择变量值只为整数或实数的「Iris」和「Wine」;
当想研究logistic回归时,我们可以选择类变量值只有两种的「Adult」;
当想研究类别变量转换时,我们可以选择属性变量为有序类别的「CarEvaluation」


任务一:切割训练集和测试集
这里使用留出法划分数据集

将数据集分为自变量和因变量
按比例切割训练集和测试集(一般测试集的比例有30%、25%、20%、15%和10%)
使用分层抽样
设置随机种子以便结果能复现
随机性,均匀分布。
【思考】

  • 划分数据集的方法有哪些?
    答:划分数据集的方法,存在留白法,交叉验证法。
  • 为什么使用分层抽样,这样的好处有什么?
    这样能够保证随机数的随机性,均匀分布。
    任务提示1
    切割数据集是为了后续能评估模型泛化能力
    sklearn中切割数据集的方法为train_test_split
    查看函数文档可以在jupyter noteboo里面使用train_test_split?后回车即可看到
    分层和随机种子在参数里寻找
    要从clear_data.csv和train.csv中提取train_test_split()所需的参数

#写入代码
#首先导入train_test_split数据集划分方法
#一般先取出X和y后再进行切割,有些情况会使用到未切割的,这种时候X和y就可以用,X是清洗好的数据,y是我们要预测的存活数据
X = data
y = train[‘Survived’]

#首先导入train_Test_split进行数据集的划分
from sklearn.model_selection import train_test_split
#对数据进行分割
#random_state:随机分配种子,设置一样的种子可以使得两次得到一样的结果
tr_X,te_X,tr_Y,te_Y = train_test_split(X,y,train_size = 0.2, random_state = 0,stratify = y )



te_X.shape
#写入代码

#查看数据的形状
tr_X.shape,te_X.shape

#写入代码



【思考】

什么情况下切割数据集的时候不用进行随机选取
#思考回答
https://www.cnblogs.com/feffery/p/8823405.html(依旧没看懂)


任务二:模型创建
创建基于线性模型的分类模型(逻辑回归)
创建基于树的分类模型(决策树、随机森林)
分别使用这些模型进行训练,分别的到训练集和测试集的得分
查看模型的参数,并更改参数值,观察模型变化
提示
逻辑回归不是回归模型而是分类模型,不要与LinearRegression混淆
随机森林其实是决策树集成为了降低决策树过拟合的情况
线性模型所在的模块为sklearn.linear_model
树模型所在的模块为sklearn.ensemble
#引入线性回归模型和决策树模型
#写入代码
#引入线性回归模型和决策树模型
from sklearn.linear_model import LgoisticRegression
from sklearn.ensemble import RandomForestClassifier
#写入代码
#默认参数逻辑回归模型
logisticRegression_1 = LogisticRegression()
#fit()训练模型,进行回归计算。
lr.fit(tr_X,tr_Y)
#预测方法,返回X的预测值
lr.predict(X,y)
#评价模型,逻辑回归模型返回平均准确度
lr.score(X,y)

e
#写入代码
#查看训练集的得分情况
print(“training set score:{:.2f}”.format(lr.score(tr_X,tr_y)))
#返回查看测试集的得分情况
print(“Testing set score:{:.2f}”.format(lr.score(te_X,te_y)))


X,tr_Y
#写入代码
lr2 = LogisticRegression(C=100)
lr2.fit(tr_X,tr_Y)

【思考】

为什么线性模型可以进行分类任务,背后是怎么的数学关系
对于多分类问题,线性模型是怎么进行分类的
#思考回答


任务三:输出模型预测结果
输出模型预测分类标签
输出不同分类标签的预测概率
提示3
一般监督模型在sklearn里面有个predict能输出预测标签,predict_proba则可以输出标签概率
#写入代码
#预测标签引用precdict
pred = lr.predict(X_train)

#写入代码
#表示数组从0-10的10个数
pred[:10]


#写入代码
#预测标签概率
pred_pro = predict_priba(tr_X)


上一篇:golang的strings,strconv


下一篇:java中线程机制