scikit-learn入门到精通(三):监督学习

KNN

#encoding=utf-8
'''
最近邻和维数灾难
'''
#分类 irises
import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
iris_X =iris.data
iris_y = iris.target
np.unique(iris_y)
'''
k近邻分类
'''
#分训练集和测试集
np.random.seed(0)
indices = np.random.permutation(len(iris_X))
iris_X_train = iris_X[indices[:-10]]
iris_y_train = iris_y[indices[:-10]]
iris_X_test = iris_X[indices[-10:]]
iris_y_test = iris_y[indices[-10:]]
#创建一个分类器
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(iris_X_train,iris_y_train)
knn.predict(iris_X_test)#array([1, 2, 1, 0, 0, 0, 2, 1, 2, 0])
iris_y_test  #对比一下array([1, 1, 1, 0, 0, 0, 2, 1, 2, 0])

线性模型

'''
线性模型
糖尿病数据集包含10个变量,442个病人样本,以及一年后的治疗结果
'''
diabetes = datasets.load_diabetes()
diabetes_X_train = diabetes.data[:-20]
diabetes_X_test = diabetes.data[-20:]
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]

from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train,diabetes_y_train)
print regr.coef_

#均方误差
np.mean((regr.predict(diabetes_X_test)-diabetes_y_test)**2)

# Explained variance score: 1 is perfect prediction
# and 0 means that there is no linear relationship
 # between X and Y.
regr.score(diabetes_X_test,diabetes_y_test)# 0.58507530226905713

shrnkage

'''
shrinkage
如果每个维度的观测集很少,观测中的噪声将导致高方差
'''
X =np.c_[.5,1].T
y= [.5,1]
test = np.c_[0,2].T
regr = linear_model.LinearRegression()
import pylab as pl
pl.figure()
np.random.seed(0)
for _ in range(6):
    this_X = .1*np.random.normal(size=(2,1))+X
    regr.fit(this_X,y)
    pl.plot(test,regr.predict(test))
    pl.scatter(this_X,y,s=3)

这里写图片描述


'''
 A solution in high-dimensional statistical learning is to shrink the regression
 coefficients to zero: any two randomly chosen set
 of observations are likely to be uncorrelated. This is called Ridge regression:
'''
regr = linear_model.Ridge(alpha=1)
pl.figure()
np.random.seed(0)
for _ in range(6):
    this_X = .1*np.random.normal(size=(2,1))+X
    regr.fit(this_X,y)
    pl.plot(test,regr.predict(test))
    pl.scatter(this_X,y,s=3)

这里写图片描述


'''
这是一个权衡方差和偏差的例子,岭回归的alpha参数越大,偏差越大,方差越小
'''
alphas = np.logspace(-4,-1,6)
from __future__ import print_function
print([regr.set_params(alpha=alpha).fit(diabetes_X_train,diabetes_y_train)
       .score(diabetes_X_test,diabetes_y_test) for alpha in alphas])
#注:岭回归导致的偏差称为正则化
'''
Sparsity稀疏问题?
当某个特征的回归系数很大,但是对响应变量贡献很小时,我们希望剔除这个变量:把它的系数设为0
岭回归不会设为0,而是减少它的贡献,另外一个惩罚方法称为lasso可以设置某些特征系数为0,称为sparse 方法
'''

regr = linear_model.Lasso()
scores = [regr.set_params(alpha=alpha
        ).fit(diabetes_X_train,diabetes_y_train
        ).score(diabetes_X_test,diabetes_y_test)
          for alpha in alphas
          ]
best_alpha = alphas[scores.index(max(scores))]
regr.alpha = best_alpha
regr.fit(diabetes_X_train,diabetes_y_train)
print (regr.coef_)
#[   0.         -212.43764548  517.19478111  313.77959962 -160.8303982    -0.
#-187.19554705   69.38229038  508.66011217   71.84239008]

分类

#逻辑回归
logistic = linear_model.LogisticRegression(C=1e5)
logistic.fit(iris_X_train,iris_y_train)


'''
支持向量机
SVM 可以用于回归-SVR 也可以用于分类 -SVC

'''
from sklearn import svm
svc = svm.SVC(kernel='linear')
svc.fit(iris_X_train,iris_y_train)
#多项式核
svc = svm.SVC(kernel='poly',degree=3) #3次多项式核
svc = svm.SVC(kernel='rbf')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值