随着网络的发展,很多单身群体开始依赖一些约会网站来寻找适合自己的对象,一般情况下,只要你注册了一个网站,会不定时给你推荐不同类型的人,但是这些人并不都是你喜欢的,然后你将人标注为3种类别
1)不喜欢的人2)魅力一般的人3)极具魅力的人有的时候,你希望在周一到周五约会那些魅力一般的人,而在周末与那些极具魅力的人进行约会
数据解析代码:
deflabel_converter(label):"""类别转换如果label为didntLike->1表示不喜欢如果label为smallDoses->2表示魅力一般如果label为largeDoses->3表示极具魅力:paramlabel::return:"""iflabel==b"didntLike":return1eliflabel==b"smallDoses":return2eliflabel==b"largeDoses":return3defdata_parse(filename):"""数据解析:paramfilename::return:"""data=np.loadtxt(filename,delimiter="\t",converters={3:label_converter})#获取特征数据X=data[:,:3]#获取标签,将标签转为整型y=np.array(data[:,3],dtype=int)returnX,y为了方便处理,我们将三种标签类型转换为对应的数字,分别是1,2,3
定义绘图函数,方便我们查看数据集
defplot(x,y,x_label,y_label,label):"""绘图:paramx:x坐标:paramy:y坐标:paramx_label:x轴:paramy_label:y轴:return:"""#这样可以很好的查看每个数据点所属的分类#根据不同的label,设置不同的颜色colors=[]forcinlabel:ifc==1:colors.append("r")elifc==2:colors.append("b")elifc==3:colors.append("g")plt.scatter(x,y,color=colors,s=15)plt.xlabel(x_label)plt.ylabel(y_label)#空的散点图来设置图例plt.scatter([],[],color="r",label="不喜欢",marker=".")plt.scatter([],[],color="b",label="魅力一般",marker=".")plt.scatter([],[],color="g",label="极具魅力",marker=".")plt.legend()plt.show()
发现,这三个类别密密麻麻的混在了一起,并没有很好的区分出来
接着查看"每年获取的飞行常客里程数"和"每周消费冰淇淋公升数"之间的关系
和上面也是一样的效果
对数据进行归一化,主要采用均值方差归一化法
代码实现
defautoScalar(dataSet):"""采用均值方差归一化:paramdataSet::return:"""#获取均值mean=np.apply_along_axis(lambdax:np.mean(x),0,dataSet)#获取方差std=np.apply_along_axis(lambdax:np.std(x),0,dataSet)#返回归一化后的数据,训练集的均值和训练集的方差return(dataSet-mean)/std,mean,std
模型训练阶段,使用到我们前一章封装好的算法模型
使用到的数据集分割代码:
deftrain_test_split(X,y,test_ratio=0.2,seed=None):"""切分数据集将数据X和y按照test_ratio分割成X_train,X_test,y_train,y_test:paramX::paramy::paramtest_ratio::paramseed::return:"""assertX.shape[0]==y.shape[0],\"X的size必须等于y的size"assert0.0<=test_ratio<=1.0,\"test_ration必须可用"ifseed:np.random.seed(seed)shuffled_indexes=np.random.permutation(len(X))test_sizt=int(len(X)*test_ratio)test_indexes=shuffled_indexes[:test_sizt]train_indexes=shuffled_indexes[test_sizt:]X_train=X[train_indexes]y_train=y[train_indexes]X_test=X[test_indexes]y_test=y[test_indexes]returnX_train,X_test,y_train,y_test