欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

machine learning

程序员文章站 2022-05-11 13:23:36
...

numpy

它是一个为Python提供高性能向量、矩阵和高维数据结构的软件包。它是用C和Fortran运行的,因此当计算被向量化(用向量和矩阵建立方程),性能是很好的。

  import pandas as pd

random()函数:生成数据、模拟仿真、初始化神经网络中的权重、分散和打散数据等。
与列表的区别
列表是动态类型、不支持数字函数如矩阵点乘等;numpy是静态类型、内存高效。

与matlab相似的是提供了各种矩阵表示和计算方法:eye()、diag()、zeros()、ones();
numpy.genfromtxt:读取I/O文件(CSV);numpy.savetxt:将Numpy数组存入一个CSV格式的文件中。
*numpy的原生文件:*numpy.save、numpy.load

数组的操作
索引、索引切片、花式索引;
where、diag、take、choose
例:

   mask = (5 < x) * (x < 7.5)
   indices = where(mask)
   x[indices]
    diag(A)
    diag(A,-1)

线性代数
算术运算符;按位运算;函数:dot()、matrix()、mean()、min()、max()、sum()等

高维数据的运算:axis
reshape(): 重塑;flatten():将高维数组变成向量;newaxis:添加新维度;repeat():重复元素;title():平铺矩阵; concatenate:连接矩阵;vstack;hstack;

copy:复制;vectorize:向量化一个函数;astype():类型转换

Pandas

panda是python处理数据的一个工具包,主要用于处理表格数据和时间序列数据。
主要包括Series对象和DataFrame对象;的基本数据结构是Series对象,它被设计为类似于NumPy数组的操作,但增加了索引功能。

特点
强大的文件读取能力;处理数据变得非常方便、快速和简单;可以轻易的处理浮点及非浮点数据类型的缺失值(NaN);灵活强大的分组功能,可对数据集进行拆分组合操作;基于智能标签的切片,花式索引,轻易从大数据集中取出子集。直观的合并,连接数据集……

创建Series和DateFrame
pd.Series、pd.DataFrame

操作函数
head()、tail()、index、columns、describe()、sort_index、sort_values、loc[]:真实值、df[]:条件、iloc[]:位置、isin()、at[]:真实值、iat[]:位置、

缺失值处理

  #代表缺失值,这些值默认不会参与运算 
  np.nan
  #允许你修改、增加、删除指定轴上的索引,并返回一个数据副本
 reindex()
 #剔除所有包含缺失值的行数据
 dropna(how='any')
 #填充缺失值
 df1.fillna(value=5)
 #获取值是否为**nan**的布尔标记
 pd.isnull(df1)

运算

   #中位数
   df.mean()
   #统计汇总
   df.describe()
   #apply对函数的作用
   df.apply(np.cumsum)
   #频数统计
   s = pd.Series(np.random.randint(0, 7, size=10))
   s.value_counts()
   #字符串操作
   str.lower()
   #连接
   pd.concat()
   #合并
   pd.merge()
   #添加
   df.append()
   #分组
   df.groupby()
   #将数据转为MultiIndex结构(多索引结构)
   pd.MultiIndex.from_tuples
   #对DataFrame的列“压缩”一个层级(unstack为逆操作)
   df.stack()
   #时间序列
   pd.date_range
   #时区表示
   ts_utc=ts.tz_localize('UTC')
   #时区转换
   ts_utc.tz_convert('US/Eastern')
   #绘图
   ts = pd.Series(np.random.randn(10), index=pd.date_range('1/1/2000', periods=10))
  ts = ts.cumsum()
  ts.plot()
  #数据I/O处理
  df.to_csv('foo.csv')
  pd.read_csv('foo.csv')
  df.to_hdf('foo.h5', 'df')
  pd.read_hdf('foo.h5', 'df')
  df.to_excel('foo.xlsx', sheet_name='Sheet1'
  pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])

outliers and missing data

深度学习中百分之七十的工作都是数据的处理,一个好的数据对机器学习具有重要的意义。其中重要的工作就是去除垃圾数据,垃圾数据的出现能导致预测的不准确。数据中出现极端值和缺省值是比较常见的情况。
当一个新的数据出现的时候,首先要考虑它是不是可信的,数据来源是不是可信的、数据本身是不是正常的、我能从数据源了解到什么。将新的数据加入到你的数据集中,通过预测准确率的变化来判断是否是垃圾数据。一般情况下,判断一个数据是不是垃圾数据并不是很容易,通常这需要不断的调试和足够的经验,当你处理了足够多的数据后,就能对数据有足够多的了解。然而比较有趣的是这通常靠的是直觉和运气,你认为这个是数据是garbage没有问题大胆的去测吧。
当一个缺省值出现的时候,确定缺省值的形式:完全随机(最期望的情况)出现一次(不影响主要参数)、完全不随机(最不期望的情况:garbage?userful? it depends on the data you have)。缺省值的出现有的时候能让你更好的去了解数据本身:为什么会出现、出现的频率和个数怎么样。对缺省值的处理通常包括:去掉包含这个缺省值的一行(not the best way)、用关联值比如中位数、平均数等代替(up to you)、随机选择另一个值、用预测的值。
研究极端值能反应很多数据问题,也许是数据中的一个错误,也许是一个额外的有用的数据。通过绘图,能比较直观的发现哪些是极限值。可以通过一个对极端值具有鲁棒性的函数去检验这些值。
if you are not sure what’s the best choice,that’s ok,what you need to do is just do it,worse or better? don’t mean it,Once you have done that remove the outliers and run your model again. You can see the different that it makes.