import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
dataset = pd.read_csv('studentscores.csv')
X = dataset.iloc[ : , : 1 ].values
Y = dataset.iloc[ : , 1 ].values
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 1/4, random_state = 0)
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)
Y_pred = regressor.predict(X_test)
plt.scatter(X_train , Y_train, color = 'red')
plt.plot(X_train , regressor.predict(X_train), color ='blue')
plt.show()
plt.scatter(X_test , Y_test, color = 'red')
plt.plot(X_test , regressor.predict(X_test), color ='blue')
plt.show()
import pandas as pd
import numpy as np
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 4 ].values
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[: , 3] = labelencoder.fit_transform(X[ : , 3])
onehotencoder = OneHotEncoder(categorical_features = [3])
X = onehotencoder.fit_transform(X).toarray()
X = X[: , 1:]
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
y_pred = regressor.predict(X_test)
线性模型虽简单,但却又丰富的变化。对于线性模型的预测值,有两种情况:
y
,这就是线性回归模型;y
的衍生物,例如:假设示例所对应的输出标记是在指数尺度上变化,那就可将输出标记的对数作为线性模型逼近的目标。这就是对数线性回归(log-linear regression)。上述的对数线性回归模型,已是线性模型的扩展,它实际上在试图让
\begin{align*}
e ^ {\vec{W}^{T}\vec{X}+b}
\end{align*}
逼近y
。但是在形式上仍然是线性回归,实际上已是在求取输入空间到输出空间的非线性函数映射,这里的对数函数起到了将线性回归模型的预测值与真实标记联系起来的作用。
更一般地,考虑到单调可微函数g(·)
,令
\begin{align*}
y=g ^ {-1}(\vec{W}^{T}\vec{X}+b)
\end{align*}
这样得到的模型称为“广义线性模型”,其中函数g(·)
称为“联系函数”。显然,对数线性回归是广义线性模型在g(·)=ln(·)
时的特例。
上面描述的使用线性模型进行回归学习,但若要做的事分类任务,根据广义线性模型:
只需找一个单调可微函数将分类任务的真是标记
y
与线性回归的预测值联系起来。
考虑二分类任务输出标记为{0,1}
,而线性回归模型产生的预测值
\begin{align*}
z=\vec{W}^{T}\vec{X}+b
\end{align*}
是实值,于是,我们需要将实值z
转换为0/1
值,最理想的是“单位阶跃函数”,但是单位阶跃函数不连续,不能直接用作g(·)
。于是我们找到“对数几率函数”:
\begin{align*}
y=\frac{1}{1+e ^ {\vec{W}^{T}\vec{X}+b}}
\end{align*}
于是,我们可以得到对数几率回归模型(也有文献称为“逻辑回归”,“对率回归”):
\begin{align*}
\ln \frac{y}{1-y}=\vec{W}^{T}\vec{X}+b
\end{align*}
虽然它的名字是“回归”,但实际确实一种分类学习方法。它是直接对分类可能性进行建模,无需事先假设数据分布,避免了假设分布不准确所带来的问题。它不仅预测出“类别”,而是可得到近似概率预测,这对许多需要利用概率辅助决策的任务很有用。此外对率函数有很好的数学性质,是任意阶可导的凸函数。现有的许多数值优化算法都可以直接用于求取最优解。
线性判别分析(Linear Discriminant Analysis,简称 LDA)是一种经典的线性学习方法,也称为“Fisher 判别分析”。
LDA的思想非常朴素:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能的远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。