章节:
1.机器学习
2.线性回归(一元一次方程的回归)
3.逻辑回归
4.聚类分析(无监督模型)
一、机器学习
(一) 基本框架
{
x
1
x
2
x
3
⋯
x
n
y
1
y
2
y
3
⋯
y
n
⋮
⋮
⋮
⋮
⋮
⋯
⋯
⋯
⋯
⋯
}
→
→
→
f
(
x
…
)
→
→
→
解决问题
\begin{Bmatrix} x_1 & x_2 & x_3 & \cdots & x_n \\ y_1 & y_2 & y_3 & \cdots & y_n\\ \vdots & \vdots & \vdots & \vdots &\vdots \\ \cdots & \cdots & \cdots & \cdots & \cdots \\ \end{Bmatrix} \to \to \to f(x \dots) \to \to \to 解决问题
⎩
⎨
⎧x1y1⋮⋯x2y2⋮⋯x3y3⋮⋯⋯⋯⋮⋯xnyn⋮⋯⎭
⎬
⎫→→→f(x…)→→→解决问题
将训练数据未给计算机,计算机自动求解数据关系,在新的数据上作出预测或给出建议
(二) 机器学习的类别
-
监督学习(Supervised Learning )
- 训练的结果为分类的结果
-
无监督学习 (Unsupervised Learning )
- 训练的结果为未知(未分类)的结果
-
半监督学习 (Semi-supervised Learning)
- 训练的结果有分类的也有未分类(未知)的
-
强化学习(Reinforcement Learning)
- 根据每次结果进行惩罚,进行优化
二、线性回归
(一)回归分析
回归分析:根据数据,确定两种或两种以上变量间相互依赖的定量关系
函数表达式:
y
=
f
(
x
1
,
x
2
,
x
3
,
…
,
x
n
)
y=f(x_1,x_2,x_3,\dots,x_n)
y=f(x1,x2,x3,…,xn)
线性回归,最小化随时函数(J)
函数表达式:
J
=
1
2
m
∑
i
=
1
m
(
y
i
′
−
y
i
)
2
=
1
2
m
∑
i
=
1
m
(
a
x
i
+
b
−
y
i
)
2
J=\frac{1}{2m} \sum_{i=1}^m(y_i'-y_i)^2 = \frac{1}{2m} \sum_{i=1}^m(ax_i +b-y_i)^2
J=2m1i=1∑m(yi′−yi)2=2m1i=1∑m(axi+b−yi)2
梯度下降法:寻找极小值的一种方法,通过该想函数当前对应梯度的反方向的规定补偿举例点进行迭代搜索,直到在极小值点收敛
函数表达式:
J
=
f
(
p
)
⇒
p
i
+
1
=
p
i
−
α
α
α
p
i
f
(
p
i
)
J = f(p) \Rightarrow p_{i+1}=p_i-\alpha {\alpha \over \alpha p_i} f(p_i)
J=f(p)⇒pi+1=pi−ααpiαf(pi)
(二) 代码实现
# 导入文件
import pandas as pd
data = pd.read_csv('generated_data1.csv')
data.head()
# 设定格式
x = data.loc[:,'x'] #:代表所有行,’x'代表列中‘x'的部分
y = data.loc[:,'y'] # loc 接收的是行列的名称或标签(闭区间) iloc 接收的是行列的索引位置(左闭右开)
print (x,y )
from matplotlib import pyplot as plt
plt.figure(figsize = (3,3)) #设定画布大小
plt.scatter (x,y) # 画点
plt.plot(x,y) # 连成线
plt.show()
# 导入实例
from sklearn.linear_model import LinearRegression
lr_model = LinearRegression()
# 重塑数组的数组
import numpy as np
x = np.array(x)
x = x.reshape(-1,1) # 重塑航写书 -1 行自动计算 1 列一列
y = np.array(y)
y = y.reshape(-1,1)
print (x,y)
# 套用模型
lr_model.fit(x,y)
y_predict = lr_model.predict(x)
# 输出预测值
print ( lr_model.predict([[100]]))
# 输出指定值
a = lr_model.coef_
b = lr_model.intercept_
# 输出一元线性函数的系数和截距
三、逻辑回归
分类:根据已知样本的某些特征,判断一个新的样本属于那种已知的样本类
基本框架
{
y
=
f
(
x
1
,
x
2
,
…
x
n
)
判断为类别
N
,如果
y
=
n
\begin{cases} y=f(x_1,x_2,\dots x_n) \\ \\ 判断为类别N,如果y=n\\ \end{cases}
⎩
⎨
⎧y=f(x1,x2,…xn)判断为类别N,如果y=n
分类方法:
逻辑回归、KNN紧邻模型、决策树、神经网络
逻辑回归
函数表达式:
y
=
1
1
+
e
−
x
(
s
e
g
m
o
i
d
方程)
y = \frac{1}{1+e^{-x}} (segmoid 方程)
y=1+e−x1(segmoid方程)
f
(
x
)
=
{
1
y
>
=
0.5
0
y
<
0.5
f(x)= \begin{cases} 1 & y>=0.5 \\ 0 & y<0.5\\ \end{cases}
f(x)={10y>=0.5y<0.5
x也可以是多元函数或多次函数或其他函数
x
=
g
(
x
1
,
x
2
,
…
x
n
)
x=g(x_1,x_2,\dots x_n)
x=g(x1,x2,…xn)
逻辑回归求解,最小化损失函数(J)
J i = { − l o g ( P ( x I ) ) , i f y i = 1 − l o g ( 1 − P ( x i ) ) , i f y i = 0 J_i= \begin{cases} -log(P(x_I)),if yi =1\\ -log(1-P(x_i)),if y_i=0\\ \end{cases} Ji={−log(P(xI)),ifyi=1−log(1−P(xi)),ifyi=0
(二)代码实现
示例1:计算肿瘤的发病(可直接复制并运行)
import pandas as pd
names = [ '样本编号','团块厚度','细胞大小均匀性','细胞形状均匀性','边缘粘附','单个上皮细胞大小','裸核','平淡染色质','正常核仁','有丝分裂','类别']
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin//breast-cancer-wisconsin.data',names = names )
# 数据处理
import numpy as np
data = data.replace( '?', np.NAN)
data = data.dropna()
# 生成训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x , y , random_state = 22)
print (x_train)
# 特征工程(标准化)
from sklearn.preprocessing import StandardScaler
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 机器学习(逻辑回归
from sklearn.linear_model import LogisticRegression
estimator = LogisticRegression()
estimator.fit( x_train, y_train )
# 模型评估
y_predict = estimator.predict(x_test)
y_predict
estimator.score( x_test , y_test )
评分方法2:
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_train , y_predict)
accuracy
画图详解2:
from matplotlib import pyplot as plt
fig2 =plt.figure()
passed = plt.scatter(data.loc[:,'Exam1'][mask],data.loc[:,'Exam2'][mask])
failed = plt.scatter( data.loc[:,'Exam1'][~mask],data.loc[:,'Exam2'][~mask]
plt.title('Exam1 - Exam2 ' )
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.legend((passed,failed),('passed','failed'))
plt.show()
注:scatter的用法(借用GoodShot的图)
四、聚类分析(无监督学习)
4.1 无监督学习(UNsupervised Learning)
没有给定实现标记过的训练实例,自耦定对输入的数据进行分类或分群
优点:
不收监督信息的约束,可能考虑到新的信息
不需要标签数据,极大程度扩大数据样本
主要应用:聚类分析(clustering)、关联规则、维度缩减
聚类分析
又称群分析,根据对象某些属性的相似度,将其自动划分为不懂的类别
常用的聚类算法
-
KMeans聚类
- 根据数据与中心距离划分类别
- 基于类别数据更新中心点
- 重复过程知道收敛
特点:- 实现简单,收敛快
- 需要指定类别数量
-
Meanshift 均值漂移聚类
- 在中心点一定区域检索数据点
- 更新中心
- 重复流程到中心点稳定
特点- 自动发现类别数量,不需要人工选择
- 需要选择区域半径
-
DBSCAN算法(给予密度的空间聚类算法)
- 基于区域点密度帅选有效数据
- 基于有效数据项周围扩张,知道没有新点加入
k均值聚类
以空间中K个点为中心进行聚类,对最靠近他们的对象归类,是聚类算法中最为基础单页最为重要的算法。
公式:
- 数据点与个簇中心点距离: d i s t ( x i , u j t ) dist(x_i,u_j^t) dist(xi,ujt)
- 根据距离归类: x i ∈ u n e a r e s t t x_i \in u_{nearest}^t xi∈unearestt
- 中心更新: u j t + 1 = 1 k ∑ x i ∈ s j ( x i ) u_j^{t+1}=\frac{1}{k} \sum_{x_i \in s_j} (x_i) ujt+1=k1∑xi∈sj(xi)
- 注: S j S_j Sj为t时刻地j个区域粗;K为包含在 S j S_j Sj范围内点的个数; x i x_i xi为包含在 S j S_j Sj范围呃逆的点; u j t u_j^t ujt为t状态下第j区域中心
算法流程:
- 选择聚类的个数
- 确定聚类中心
- 根据点到聚类中心聚类确定个点所属类别
- 根据各个类别数据更新聚类中心
- 重复以上步骤直到收敛
优点
- 原理简单,实现容易,收敛速度快
- 参数少,方便使用
缺点
- 必须设置簇的数量
- 随机选择出示聚类中心,结果可能缺乏一致性