正文
]
[
5.936
2.77
4.26
1.326
]
[
6.588
2.974
5.552
2.026
]]
LDA做分类时的正确率:
0.980952380952
LDA降维后特征空间的类中心:
[[
-
0.81926852
0.03285975
]
[
-
1.5478732
2.15471106
]
[
2.18494056
-
0.93024679
]
[
2.85385002
2.8060046
]]
常用模型
首先sklearn中所有的模型都有四个固定且常用的方法,其实在PCA与LDA中我们已经用到了这些方法中的fit方法。
# 拟合模型
model.fit(X_train, y_train)
# 模型预测
model.predict(X_test)
# 获得这个模型的参数
model.get_params()
# 为模型进行打分
model.score(data_X, data_y) # 回归问题:以R2参数为标准 分类问题:以准确率为标准
线性回归
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的正态分布。回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。其实,说白了,就是用一条直线去拟合一大堆数据,最后把系数w和截距b算出来,直线也就算出来了, 就可以拿去做预测了。sklearn中线性回归使用最小二乘法实现,使用起来非常简单。线性回归是回归问题,score使用R2系数做为评价标准。
import sklearn.linear_model as sk_linear
model = sk_linear.LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=1)
model.fit(X_train,y_train)
acc=model.score(X_test,y_test) #返回预测的确定系数R2
print('线性回归:')
print('截距:',model.intercept_) #输出截距
print('系数:',model.coef_) #输出系数
print('线性回归模型评价:',acc)
参数说明:fit_intercept:是否计算截距。False-模型没有截距 normalize:当fit_intercept设置为False时,该参数将被忽略。如果为真,则回归前的回归系数X将通过减去平均值并除以l2-范数而归一化。copy_X:是否对X数组进行复制,默认为True n_jobs:指定线程数
打印结果:
线性回归:
截距: -0.379953866745
系数: [-0.02744885 0.01662843 0.17780211 0.65838886]
线性回归模型评价: 0.913431360638
逻辑回归
logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。说人话:线性回归是回归,逻辑回归是分类。逻辑回归通过logistic函数算概率,然后算出来一个样本属于一个类别的概率,概率越大越可能是这个类的样本。sklearn对于逻辑回归的实现也非常简单,直接上代码了。逻辑回归是分类问题,score使用准确率做为评价标准。
import sklearn.linear_model as sk_linear
model = sk_linear.LogisticRegression(penalty='l2',dual=False,C=1.0,n_jobs=1,random_state=20,fit_intercept=True)
model.fit(X_train,y_train) #对模型进行训练
acc=model.score(X_test,y_test) #根据给定数据与标签返回正确率的均值
print('逻辑回归模型评价:',acc)
参数说明:penalty:使用指定正则化项(默认:l2) dual: n_samples > n_features取False(默认) C:正则化强度的反,值越小正则化强度越大 n_jobs: 指定线程数 random_state:随机数生成器 fit_intercept: 是否需要常量