2020-5-1学习记录

1.sklearn 分层抽样 StratifiedShuffleSplit

https://blog.csdn.net/m0_38061927/article/details/76180541 这个给的例子还不错

from sklearn.model_selection import StratifiedShuffleSplit
import numpy as np
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4],
              [1, 2],[3, 4], [1, 2], [3, 4]])#训练数据集8*2
y = np.array([0, 0, 1, 1,0,0,1,1])#类别数据集8*1

ss=StratifiedShuffleSplit(n_splits=1,test_size=0.25,train_size=0.75,random_state=0)#分成5组,测试比例为0.25,训练比例是0.75

for train_index, test_index in ss.split(X, y):#这里调用split分割
   print("TRAIN:", train_index, "TEST:", test_index)#获得索引值
   X_train, X_test = X[train_index], X[test_index]#训练集对应的值
   y_train, y_test = y[train_index], y[test_index]#类别集对应的值
#输出:
TRAIN: [5 2 6 4 1 3] TEST: [7 0]

 

n_splits控制分成几份train/test对,也可以多次生成就可以发现,train中正例和负例数目是相等的。

其实这个函数很好理解啦,不必要花费太多的时间。

2.pandas的scatter_matrix散点矩阵

https://pandas.pydata.org/docs/reference/api/pandas.plotting.scatter_matrix.html

df = pd.DataFrame(np.random.randn(1000, 4), columns=['A','B','C','D'])#对角线是特征直方图,其他的是散点图
scatter_matrix(df, alpha=0.2)#alpha是透明度参数

 

 

其实可以发现散点图是那种反对称的。

3.从数据框中删除行或列

这个需要知道行的索引标签或者列的标签:

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

df = df.append(df2)

# Drop rows with label 0
df = df.drop('a',axis=1)

print(df)
#输出:删除列
   b
0  2
1  4
0  6
1  8

df = df.drop(0,axis=0)
#输出:删除行:行为0的
   a  b
1  3  4
1  7  8

 

也学到了。drop是会返回副本的,不影响原来的数据框对象。

这里的axis和numpy中的一样,0表示行,1表示列。

4.sklearn中的impute方法

插补方法。

https://stackoverflow.com/questions/50843757/getting-modulenotfounderror-no-module-named-sklearn-impute-despite-having-l

import的时候遇到了找不到模块的问题,原来是版本问题,0.19的sklearn中是没有这个插补方法的。

所以选择升级,现在它已经有0.22版本的包了。

ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。

https://blog.csdn.net/jacke121/article/details/86747921

pip install --user --upgrade scikit-learn

加个--user就可以了。

import numpy as np
from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
#imp_mean.fit([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]])
print(imp_mean.fit_transform([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]]))

X = [[np.nan, 2, 3], [4, np.nan, 6], [10, np.nan, 9]]
print(imp_mean.fit_transform(X))

#输出
[[ 7.   2.   3. ]
 [ 4.   3.5  6. ]
 [10.   5.   9. ]]
[[ 7.  2.  3.]
 [ 4.  2.  6.]
 [10.  2.  9.]]

 

其实原来给的样例代码是,先fit一个,然后再transformX,其实我就不太明白,为什么不用自身去transform自身呢,所以我就改了一下。

https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html

 

可以看到这里的策略有四种:均值、中位数、众数、指定常数。

5.np.r_ np.c_

import numpy as np
a = np.array([[1, 2, 3],[7,8,9]])

b=np.array([[4,5,6],[1,2,3]])
print(np.c_[a,b])
print(np.r_[a,b])
#输出:

[[1 2 3 4 5 6]
[7 8 9 1 2 3]]
[[1 2 3]
[7 8 9]
[4 5 6]
[1 2 3]]

 

分别是按行连接,要求列数相同;按列连接,则要求行数相同。

posted @ 2020-05-01 21:31  lypbendlf  阅读(170)  评论(0编辑  收藏  举报