当前位置:   article > 正文

逻辑斯蒂回归_进行标准化 data=digits.data

进行标准化 data=digits.data
1、Logistics回归的原理:
利用Logistics回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。这里的“回归” 一词源于最佳拟合,表示要找到最佳拟合参数集。

训练分类器时的做法就是寻找最佳拟合参数,使用的是最优化算法。接下来介绍这个二值型输出分类器的数学原理

Logistic Regression和Linear Regression的原理是相似的,可以简单的描述为这样的过程:

(1)找一个合适的预测函数,一般表示为h函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程是非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。

(2)构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。

(3)显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有梯度下降法(Gradient Descent)。


2.实战:
1) 手写数字数据集的分类
使用KNN与Logistic回归两种方法
from sklearn.linear_model import LogisticRegression
import sklearn.datasets as datasets

digits = datasets.load_digits()
digits

data = digits.data
target = digits.target
data.shape

digits.images.shape

import matplotlib.pyplot as plt
%matplotlib inline

plt.figure(figsize=(1,1))
plt.imshow(data[100].reshape((8,8)),cmap="gray")

target[100]

# 对数据进行切分
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data,target,test_size=0.02)

lgr = LogisticRegression()

lgr.fit(x_train,y_train)

lgr.score(x_test,y_test)

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier()
knn.fit(x_train,y_train)

knn.score(x_test,y_test)

2)使用make_blobs产生数据集进行分类
make_blobs()函数用于创建一些列的点,可以根据不同维度和分类

datasets.make_blobs(n_samples=10,n_features=3,random_state=10,centers=5)

data,target = datasets.make_blobs(n_samples=150,random_state=1,centers=3)
data.shape
(150, 2)

target

plt.scatter(data[:,0],data[:,1],c=target)

import numpy as np

# 对以上的三类点进行区域的划分
ymin,ymax = data[:,1].min(),data[:,1].max()
xmin,xmax = data[:,0].min(),data[:,0].max()

x = np.linspace(xmin,xmax,100)
y = np.linspace(ymin,ymax,100)

xx,yy = np.meshgrid(x,y)

xy = np.c_[xx.ravel(),yy.ravel()]
xy.shape
xx,x

lgr = LogisticRegression()
lgr.fit(data,target)

y_ = lgr.predict(xy)
y_

plt.scatter(xy[:,0],xy[:,1],c=y_)
plt.scatter(data[:,0],data[:,1],c=target,cmap="rainbow")

knn = KNeighborsClassifier()
knn.fit(data,target)
y_ = knn.predict(xy)

plt.scatter(xy[:,0],xy[:,1],c=y_)
plt.scatter(data[:,0],data[:,1],c=target,cmap="rainbow")
plt.scatter(xy[:,0],xy[:,1],c=y_)

plt.scatter(data[:,0],data[:,1],c=target,cmap="rainbow")

梯度下降法
import pandas as pd
import pandas as pd

# 预测癌细胞
data = pd.read_csv("../data/cencerData.csv")
data.head()

data.shape
(699, 11)

import numpy as np

# 通过观察数据需要清洗
# 把所有的“?”替换成nan
data.replace(to_replace="?",value=np.nan,inplace=True)

# 把缺失的行丢弃掉
data.dropna(how="any",inplace=True)
data.isnull().any()

data.columns

# 提取出标签和特征
x = data[['Clump Thickness', 'Uniformity of Cell Size',
       'Uniformity of Cell Shape', 'Marginal Ashesion',
       'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
       'Normal Nucleoli', 'Mitoses']]
y = data[["Class"]]

# 划分训练数据和测试数据
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
为了不使某些过大的特征对预测结果起主导作用,可以对数据进行标准化

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()

x_train = ss.fit_transform(x_train) # 保证了每个特征的标准差为1,均值为0
# ss.fit(x_test)
# ss.transform(x_test)
x_test = ss.fit_transform(x_test)

x_train,x_test

from sklearn.linear_model import LogisticRegression,SGDClassifier

sgd = SGDClassifier()

sgd.fit(x_train,y_train)

sgd.score(x_test,y_test)
0.96491228070175439

lgr = LogisticRegression()

lgr.fit(x_train,y_train)
lgr.score(x_test,y_test)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/279364
推荐阅读
相关标签
  

闽ICP备14008679号