流水线的处理 可以先看一下度娘pima数据的分布情况
对数据进行简单的处理
#手动添加列的标题
pima_column_names=["Pregnancies","Glucose","BloodPressure","SkinThickness","Insulin","BMI","DiabetesPedigreeFunction","Age","Outcome"]
pima=pd.read_csv("pima.data",names=pima_column_names)
#处理缺失值
items=["Glucose","BloodPressure","SkinThickness","Insulin","BMI","DiabetesPedigreeFunction","Age"]
#这里因为里面的数据集是0 0 是利用pima.isnull().sum是检测不出来的 为了方便看到空值情况
for item in items:
pima[item]=pima[item].map(lambda x:x if x!=0 else None)
最后一步组装流水 流水的作用就是生成一条自动化的通道 这里最重要的一点参数的设置具体看代码
#填补缺失值 策略 有三种 删除
from sklearn.pipeline import Pipeline #导入流水
from sklearn.preprocessing import Normalizer #引入归一化
from sklearn.preprocessing import StandardScaler #标准化数据
from sklearn.model_selection import GridSearchCV #网格搜素 找出最优的参数
from sklearn.neighbors import KNeighborsClassifier #K近邻算法
from sklearn.preprocessing import Imputer #缺失值的处理
#注意这里的参数 这里的参数classify__n_neighbors 这里前面classify是流水线里面是自己定义的名子
knn_params={"classify__n_neighbors":[1,2,3,4,5,6,7],"imputer__strategy":["mean","median","most_frequent"],"standardize__norm":["l1","l2","max"]}
imputer=Imputer()#处理缺失值
scaler=StandardScaler()#标准化数据
knn=KNeighborsClassifier()#实例化Knn算法
#组装流水 先进行数据填充--》 设定范围 也就是特征的选择 -->选择算法的模型
mean_imputer_pipline=Pipeline( [("imputer",imputer),('standardize',scaler),("classify",knn)] )
#对每一个数据进行
X=pima.drop("Outcome",axis=1)
y=pima["Outcome"]
#遂于建立得网格模型进行暴力搜素
grid=GridSearchCV(mean_imputer_pipline,knn_params)
grid.fit(X,y)
print("最好的参数性能",grid.best_params_)
print("最好的性能",grid.best_score_)
其实流水线就是为了将一段一段的操作结合到一起来 Pipline里面的参数一定要是一个学习器 也就是必须要有fit和tranform的方法所以子集写的函数要加入流水中一定要实现对一个类的继承实现这些方法才能加入到流水,由于流水线中的各个生成器和学习器会有多个参数于是最好是利用网格搜素来找到最优的参数