Python与机器学习
pandas里面的对于数据操作比如where,drop以及dropna等都会有一个属性:inplace,这个单词意思是原地,如果inplace=true代表数据本身要返回(原地数据也会被改变);如果inplace=false(默认)代表只是返回数据一个副本(copy,原数据并不会被改变)。
DataFrame里面的corr其实是(线性)相关性,什么是相关性?就是变量A的增长是否导致B的增长(减少)。
DataFrame在聚集操作(比如计算均值)的时候,是可以从两个维度来进行计算,axis=0是纵向,axis=1是横向;对于一个m行,n列的数据,df.mean(axis=0)返回的是一行n列数据,因为在纵向上进行聚集;如果df.mean(axis=1)则代表是横向聚集,于是是一列m行数据。
num_attribs=list(housing_num) #num_attribs返回的是列名
TypeError Traceback (most recent call last) <ipython-input-178-70bca072c4f7> in <module>() 1 from sklearn.model_selection import GridSearchCV 2 param_grid={ ----> 3 {'n_estimators':[3, 10, 30], 'max_features':[2,4,6,8]},{'bootstrap':[False], 'n_estimators':[3,10], 'max_features':[2,3,4]} 4 } 5 TypeError: unhashable type: 'dict'
这个是因为param_grid应该是[],而不是{};故爆此异常。
关于pyton里面的zip
zip的操作是用于两个array位置匹配组合成
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b) # 打包为元组的列表
>>> [(1, 4), (2, 5), (3, 6)]
zip(a,c) # 元素个数与最短的列表一致
>>> [(1, 4), (2, 5), (3, 6)]
zip(*zipped) # 与 zip 相反,可理解为解压,返回二维矩阵式
>>> [(1, 2, 3), (4, 5, 6)]
dataframe里面drop并不改变原始数据集,只是返回了操作后的数据集,如下例:strat_train_set其实并没有删除median_house_value列,但是housing确实没有该列的数据(那是因为inplace默认为false,所以所有的操作只是在数据的副本中进行,同时返回副本)。
housing = strat_train_set.drop("median_house_value", axis=1)
housing_labels = strat_train_set["median_house_value"].copy()
注意dataframe的where条件,第一个谓词判断(条件判断),第二个是如果谓词判断不满足(条件返回为false),则替换。第三个参数则是代表数据是否要覆盖当前数据集,如果True则是覆盖当前数据及,如果为false则不修改当前数据集,而是创建一个拷贝,然后对于拷贝数据集进行修改;如果设置为False需要接收返回值,因为下面的例子中“inplace=True”,所以修改是发生在当前数据集的,所以不需要接收返回值。
housing["income_cat"].where(housing["income_cat"] > 5, 5.0, inplace=True)
StratifierShuffleSplit,其实是StratifierKFloder和ShufflerSplit的组成,是交叉验证的实现。看一下下面的代码,注意这里train_index,以及test_index返回的其实是数组,这里编译器的处理和Java不同,java是逐个遍历,逐个处理,但是对于python而言,是一次性获取所有的值,然后把数组扔给housing,让housing去遍历然后返回值给strat_train_set以及strat_test_set。
1 split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42) 2 for train_index, test_index in split.split(housing, housing["income_cat"]): 3 print(str(train_index) + ";" + str(test_index) + "\n") 4 strat_train_set = housing.loc[train_index] 5 strat_test_set = housing.loc[test_index]
关于交叉预期(corst_val_predict)
cross_val_predict里面有一个参数是cv,代表的含义就是cross-validation,交叉验证。
关于numpy.rand与numpy.randn
前者是无规律的随机数(当时是伪随机数),后者则是符合正态分布的随机数,所以在构造随机数的时候,为了获得更好的扩散性,通常都会选择randn,randn相对而言数据分布会更加分散一些,而rand产生的随机数则比较紧凑。