机器学习实战笔记
标签(空格分隔): python
切片
A[:2]和A[::2]有区别
假设A = [1, 2, 3, 4, 5]
:一个是[1, 2]
::一个是[1, 3, 5]
A[1:4]和A[1::4]是有区别的
A[1:4] => A[1:4:1]是1到4之间间隔为1,a:b:c表示a到b,间隔c
A[1::4] 表示从1开始间隔4
nonzero用法
- python numpy中nonzero()的用法
参考博客
其中需要注意的是矩阵一定是二维的,哪怕看起来向数组,下标是(0,i)
还有需要注意的就是numpy中b.A的用法
>>> a = mat([1, 0, 3, 4, 5])
>>> b = a.T
>>> nonzero((b.A>1)*(b.A<5))[0]
array([2, 3])
>>> nonzero((b.A>1)*(b.A<5))
(array([2, 3]), array([0, 0]))
>>> c = a.A>0
>>> c
array([[ True, False, True, True, True]], dtype=bool)
matrix和array区别
numpy matrix和array区别
array中*是元素各自相乘
matrix中则是矩阵乘法,对应位置乘用multiply
zeros((m,n)) return array
有时候会用到嵌套的列表(list),比如
[1, 2, [3, 4, [5, 6]], [“abc”, “def”]]
如果将嵌套的列表拉平(flatten)呢?变成:
[1, 2, 3, 4, 5, 6, “abc”, “def”]
使用flatten()
corrcoef()计算相关系数
数值映射
import pandas as pd
df = pd.DataFrame([
['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class1']],columns = ['color', 'size', 'prize', 'class label'])
size_mapping = {
'XL': 3,
'L': 2,
'M': 1}
#print(df)
#Series的map函数,将对应的values替代为size_mapping的数值。
df['size'] = df['size'].map(size_mapping)
数据整合
有时候在merge的时候,会出现merge后的列名出现冲突的情况,这个时候pandas会自动给我们把冲突的列名加上前缀,eg. EID_x
如果我们需要继续x_EID是EID方便使用的话,那么我们就需要单独修改一列的名字
df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# OR
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)
截断SVD
import numpy as np
from scipy.sparse.linalg import svds
matrix = mat(np.random.random((20, 20)))
num_components = 19
u, s, v = svds(matrix, k=num_components)
X = mat(u.dot(np.diag(s))) * mat(v) # output of TruncatedSVD
切换python版本
# 基于 python3.6 创建一个名为test_py3 的环境
conda create --name test_py3 python=3.6
# 基于 python2.7 创建一个名为test_py2 的环境
conda create --name test_py2 python=2.7
# 激活 test 环境
activate test_py2 # windows
source activate test_py2 # linux/mac
# 切换到python3
activate test_py3
管理工具
# 安装 matplotlib
conda install matplotlib
# 查看已安装的包
conda list
# 包更新
conda update matplotlib
# 删除包
conda remove matplotlib
查找第一个符合条件的
def first(the_iterable, condition = lambda x: True):
for i in the_iterable:
if condition(i):
return i
测试
>>> first(range(10))
0
>>> first(range(10), lambda i: i > 3)
4
划分数据集
得到groupby后分组的前n项\前一半
应用场景: 有时候需要根据时间来划分训练集测试集,稍微复杂的情况是需要先分组再根据时间或者其他属性划分
此用法可以获取根据‘col1’分组后获得最大的col2前k项
array = [[1,2],[1,0],[1,5],[2,2],[2,0],[2,5],[2,1]]
data = DataFrame(array, columns = ['col1', 'col2'])
print(data)
data = data.groupby(['col1']).apply(lambda x:(
x.sort_values('col2', ascending=False)[:int(x.shape[0]*0.5)])).reset_index(drop=True)
print(data)
# col1 col2
#0 1 2
#1 1 0
#2 1 5
#3 2 2
#4 2 0
#5 2 5
#6 2 1
# col1 col2
#0 1 5
#1 2 5
#2 2 2