您的位置:首页 > 编程语言 > Python开发

python matplot美化+坐标轴范围设置等笔记

2018-03-25 16:48 936 查看
一.sklearn评估

1.混淆矩阵

from sklearn.metrics import confusion_matrix
confusion_matrix(testLabel,pre_label)

2.大小类评估指标:精确率,召回率,f1得分

from sklearn.metrics import classification_report
classification_report(testLabel, pre_label)

3.交叉验证

mode = GradientBoostingClassifier()
cross_val_score(mode, feaSet, inLabel, cv = 10, scoring = 'accuracy')

二.matplot 绘图

1.设置坐标轴标注

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.bar(x, befor,  width=width, label='befor',color='b')

2.设置要显示的坐标轴坐标

ax.set_xticks([1,2,3,4,5])
#设置对应坐标的显示文字,rotation为文字的顺时针旋转角度,fontsize为文字大小
ax.set_xticklabels(['one','two','three','four','five'],rotation=45,fontsize=12)
plt.show()

3.设置图标标注

#loc表示位置
plt.legend(loc='lower right')

4.设置坐标轴的显示范围

plt.xlim(0.5, 5.5)
plt.ylim(0.5, 1.0)

5.在图中显示文字标注

#三个参数分别为x,y,要显示的内容
plt.text(xloc,yloc,str)

6.美化风格

plt.style.use('ggplot')

三.lgb特征重要性

feim = pd.Series(gbm.feature_importance(),index=gbm.feature_name())
    feim = feim.sort_values(ascending=False)

四.机器学习距离度量

EuclideanDistance :欧式距离,0ρ = sqrt( (x1-x2)^2+(y1-y2)^2 )

ManhattanDistance :曼哈顿距离,两个点在标准坐标系上的绝对轴距总和,d(i,j)=|xi-xj|+|yi-yj|

ChebyshevDistance :切比雪夫距离,二个点之间的距离定义是其各坐标数值差绝对值的最大值

MinkowskiDistance :闵可夫斯基距离,(∑|xi-yi|^p)^(1/p) (i=1,2,...n),p取1或2时的明氏距离是最为常用的,p=2即为欧氏距离,而p=1时则为曼哈顿距离

五.numpy要点

1.将值大于0.5的元素全部置为1

    tempA = np.array(wordcounts)
    tempA[ tempA > 0.5 ] = 1

六.python忽略warninig输出

1.代码中

import warnings
warnings.filterwarnings('ignore')

2.命令行

python -W ignore file.py

3.python遍历文件夹下面所有文件

import os
os.listdir(jpgpath)

4.python删除文件

import os
filename = 'f:/123.txt'
if os.path.exist(filename):
  os.remove(filename)

七.sklearn输出线性模型的特征重要性

1.svm特征重要性
mode = SVC()
mode.fit(trainset, trainlabel)
print( mode.._get_coef())

2.LinearRegression 系数向量与截距

    lrw = mode.coef_ #系数向量
    lrb = mode.intercept_ #截距

八.numpy中判断两个array是否相等

np.array_equal( np.array(newtestSet),np.array(testSet) )

九.python中字典的存储与还原

      #保存
        dict_name = {1:{1:2,3:4},2:{3:4,4:5}}
        f = open('temp.txt','w')
        f.write(str(dict_name))
        f.close()
        
        #读取
        f = open('temp.txt','r')
        a = f.read()
        dict_name = eval(a)
        f.close()

十. sklearn线性特征扩充

poly = PolynomialFeatures(2)
trainSet = poly.fit_transform(trainSet)

十一. 平均数编码:针对高基数定性特征

1. 一般情况下,针对定性特征,我们只需要使用sklearn的OneHotEncoder或LabelEncoder进行编码:
(data_df是一个pandas dataframe,每一行是一个training example,每一列是一个特征)

from sklearn.preprocessing import OneHotEncoder, LabelEncoder
import numpy as np
import pandas as pd

le = LabelEncoder()
data_df['street_address'] = le.fit_transform(data_df['street_address'])

ohe = OneHotEncoder(n_values='auto', categorical_features='all', dtype=np.float64, sparse=True, handle_unknown='error')
one_hot_matrix = ohe.fit_transform(data_df['street_address'])

值得一提的是,LabelEncoder将n种类别编码为从0到n-1的整数,虽然能够节省内存和降低算法的运行时间,但是隐含了一个假设:不同的
类别之间,存在一种顺序关系。在具体的代码实现里,LabelEncoder会对定性特征列中的所有独特数据进行一次排序,从而得出从原始输入
到整数的映射。定性特征的基数(cardinality)指的是这个定性特征所有可能的不同值的数量。在高基数(high cardinality)的定性特
征面前,这些数据预处理的方法往往得不到令人满意的结果。主要原因:

1. LabelEncoder编码高基数定性特征,虽然只需要一列,但是每个自然数都具有不同的重要意义,对于y而言线性不可分。使用简单模
型,容易欠拟合(underfit),无法完全捕获不同类别之间的区别;使用复杂模型,容易在其他地方过拟合(overfit)。

2. OneHotEncoder编码高基数定性特征,必然产生上万列的稀疏矩阵,易消耗大量内存和训练时间,除非算法本身有相关优化(SVM)

2. 在贝叶斯的架构下,利用所要预测的应变量(target variable),有监督地确定最适合这个定性特征的编码方式。在Kaggle的数据竞赛
中,这也是一种常见的提高分数的手段。

十二 . 编程基础知识

1. 就编程而言,可移植性表示什么?
一个程序的移植性好,就是指它的源代码不经修改就可以在多种不同的计算机系统上编译成可成功运行的程序

2. 解释源代码文件,目标代码文件和可执行文件之间的区别
源代码文件中包含程序员使用任何编程语言编写的代码
目标代码文件包含着机器语言代码,它并不需要完整的程序代码
可执行文件包含着组成可执行程序的全部机器语言代码

3. 编程的7个主要步骤是什么?
定义程序目标、编写程序代码、编译程序、运行程序、测试和调试程序、维护和修改程序

4. 编译器的主要任务是什么?
编译器把源代码(例如,用c语言写成的代码)转换为机器语言代码,也称对象代码

5. 连接器的任务是什么?
链接器把多个来源(例如,已编译的源代码,库代码和启动代码)的目标代码连接成一个单独的可执行程序

十三. 核函数的作用
核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的
核函数要满足的条件称为Mercer's condition。理论上,由于train set 是有限的,当我们把data投射到无限维度的空间上一定
可以在trainset上完美分类,至于在testset上应该选取(试试各种)合适的kernel function 来避免过拟合。

在机器学习中常用的核函数,一般有这么几类,也就是LibSVM中自带的这几类:
1) 线性:K(v_1,v_2)=<v_1,v_2>
2) 多项式:K(v_1,v_2)=(\gamma<v_1,v_2>+c)^n
3) Radial basis function:K(v_1,v_2)=\exp(-\gamma||v_1-v_2||^2)
4) Sigmoid:K(v_1,v_2)=\tanh(\gamma<v_1,v_2>+c)

十四. 绘制分类平面
#绘制分类平面
x1min,x1max = min(trainset[:,0]),max(trainset[:,0])     #特征1的范围
x2min,x2max = min(trainset[:,1]),max(trainset[:,1])     #特征2的范围
t1 = np.linspace(x1min,x1max,500)       #生成特征1的网格点
t2 = np.linspace(x2min,x2max,500)       #生成特征2的网格点
x1,x2 = np.meshgrid(t1,t2)              #得到所有的点
xtest = np.stack((x1.flat,x2.flat),axis=1)  #更改点的形状
yhat = lrmode.predict(xtest)    #对网格点做预测
yhat = yhat.reshape(x1.shape)   #更改预测结果
plt.pcolormesh(x1,x2,yhat,alpha = 0.1)  #绘制等高线

plt.scatter(trainset[:,0],trainset[:,1],c=trainlabel,s=50)  #绘制原始点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: