机器学习----监督学习-分类学习
---- 之线性分类器学习(二分类)
-
介绍:是一种假设特征与分类结果之间存在线性关系,通过累计每个结果的维度特征与其对应权值的乘积,来得到决策结果。
注:应该先看第3点的,这个顺序换不过来orz
-
Python代码:
(1)、分割数据:部分数据用于做模型训练(一般需要的数据量比较大,可以通过网上公开的数据源,或者向企业获取,或者自己爬虫??)一部分数据用于测试模型的准确度;
用到sklearn.cross_valiation里的train_test_split函数;
x_train,x_test,y_train,y_test=train_test_split(data[column_names[1:10]],
data[colum_names[10]],test_size=0.25,random_state=33)
注:我用的sklean包中没有这个模块,这个函数在sklearn_model_selection中,找不到valiation的可以试试有没有这个
(2)、标准化数据,是每个维度的值均值为0,方差为1(有些数据分量的值本身比较大,会对判断产生影响)让每个数据在同一起跑线上;
用到的sklearn。preprocessing里的StandardScaler
ss=StandardScalar();
X_train=ss.fit_transform(x_train);
X_test=ss.trainsform(x_test);
(3)、用训练集来训练模型(其实就是确定参数),有两种方式,一种是逻辑斯蒂回归模型,还有一种是它的快速算法,随机梯度下降参数估计模型;
法一逻辑斯蒂回归:使用sklearn.linear_model中的LogisticRegression模块中的fit函数来构造模型
lr.fit(X_train,Y_train);
lr_y_predict=lr.predict(X_test); #使用predict函数 得到线性预测结果
法二随机梯度下降估计模型:使用sklearn.linear_model中的SGDClassifiar中的fit函数构造模型,以及predict函数预测
sgdc.fit(X_train,Y_train);
sgdc_y_predict=sgdc.predict(X_test);#得出结果
(5)、性能分析,测试得到的模型的性能(有几种不同的标准不仔细展开)这里也有两个函数可以使用;
一种是上述两种方法中自带的score函数用于获得准确性结果;
另一种是使用sklearn.metrics中的 classification_report函数例如:
classification_report(Y_test,y_predict,target_names=['Benign',...])
#target_names中的参数是需要显示的样本名自己定义,
#Y_test是已知的正确的测试结果,与y_predict是不同模型(lr或sgdc_y_predict)得到的结果进行对比分析
- 方法原理:
(1)、确定样本维度特征值列向量X=<x1,x2,x3…xn>;
(2)、权重系数,根据样本训练得到列向量W=<w1,w2,w3…wn>;
(3)、根据以上的列向量,得到以下线性表达式:
(4)、期待f函数的值落在(0,1)之间,便于二分类,引入逻辑斯蒂函数,则有:
(5)、逻辑斯蒂函数必过(0,0.5)根据函数的性质,则以0.5为界进行归类,g>0.5为1;g<0.5为0;
(6)、最后求上述模型的参数W,b;应用极大似然估计法:
特征向量X=<x1,x2,…,xn>,分类结果列向量Y=<y1,y2,…,yn>,则:
可以使用随机梯度下降算法进行快速参数估计;