35题初探scikit-learn库

注:文章转载自:https://zhuanlan.zhihu.com/p/97977032
在网上看到了一个总结的比较好的文章,就偷出来了,有空就看看。
一、获取数据
1.导入sklearn的数据集模块

from sklearn import datasets

2.导入预置的手写数字数据集

import matplotlib.pyplot as plt
digits = datasets.load_digits()
plt.matshow(digits.images[0])
plt.show()

3.生成数据用于聚类,100个样本,2个特征,5个类

data, label = datasets.make_blobs(n_samples=100, n_features=2, centers=5)
plt.scatter(data[:, 0], data[:, 1], c=label)
plt.show()

二、数据预处理
4.导入sklearn的预处理模块

from sklearn import preprocessing

5.计算一组数据的平均值和标准差(scaler)

data = [[0, 0], [1, 0], [-1, 1], [1, 2]]
scalerstd = preprocessing.StandardScaler().fit(data)
print(scalerstd.mean_)
print(scalerstd.var_)

6.使用上一题的scaler标准化现有数据

scalerstd.transform(data)

7.用最小最大规范化对数据进行线性变换,变换到[0,1]区间

scalermm = preprocessing.MinMaxScaler(feature_range=(0, 1)).fit(data)
scalermm.transform(data)

8.用L2正则化对数据进行变换

X = [[ 1., -1.,  2.],
    [ 2.,  0.,  0.],
    [ 0.,  1., -1.]]
    
scalernorm = preprocessing.Normalizer(norm='l2').fit(X)
scalernorm.transform(X)

# 方法二

# preprocessing.normalize(X, norm='l2')

9.对现有数据进行one-hot编码

data = [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]

scaleronehot = preprocessing.OneHotEncoder().fit(data)
scaleronehot.transform(data).toarray()

10.给定阈值,将特征转换为0/1

data = [[0, 0], [1, 0], [-1, 1], [1, 2]]

scalerbin = preprocessing.Binarizer(threshold=0.5)
scalerbin.transform(data)

11.对现有数据进行标签编码

scalerlabel = preprocessing.LabelEncoder()
scalerlabel.fit(["paris", "paris", "tokyo", "amsterdam"])
scalerlabel.transform(["tokyo", "tokyo", "paris"])

三、数据及拆分
12.将现有数据划分为训练集和测试集,测试集数量占比为30%

from sklearn import model_selection
dataset = datasets.load_boston()
print(dataset.data.shape)
X_train, X_test, y_train, y_test = model_selection.train_test_split(dataset['data'], dataset['target'], test_size=0.3)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)

13.将现有数据划分为3折

import numpy as np
X = np.array(['a', 'b', 'c', 'd','e','f'])
kfold = model_selection.KFold(n_splits=3)
for train, test in kfold.split(X):
    print("%s %s" % (X[train], X[test]))

四、使用模型
14.定义一个线性回归模型

from sklearn.linear_model import LinearRegression
model = LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)

15.导入预置的波士顿房价数据集

X,y = datasets.load_boston(return_X_y=True)

16.设置房价为Y,剩余参数为X,30%为测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

17.用线性回归模型拟合波士顿房价数据集

model.fit(X_train, y_train)

18.用训练完的模型进行预测

model.predict(X_test)

19.输出线性回归模型的斜率和截距

print(model.coef_)
print(model.intercept_)

五、评估
20.使用随机森林对鸢尾花数据集进行预测,n_estimators=100

from sklearn.ensemble import RandomForestClassifier
X,y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

clf = RandomForestClassifier(n_estimators=100)
clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)
y_pred

21.给产生的随机森林模型打分

clf.score(X,y)

22.输出模型的recision_score、recall_score、f1_score

from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

23.使用手写数字数据集,随机森林算法进行分类,画出学习曲线

from sklearn.model_selection import learning_curve

X,y = datasets.load_digits(return_X_y=True)

train_sizes,train_score,test_score = learning_curve(RandomForestClassifier(n_estimators = 10),X,y,train_sizes=[0.1,0.2,0.4,0.6,0.8,1],scoring='accuracy')

train_error =  1- np.mean(train_score,axis=1)
test_error = 1- np.mean(test_score,axis=1)

plt.plot(train_sizes,train_error,'o-',color = 'r',label = 'training')
plt.plot(train_sizes,test_error,'o-',color = 'g',label = 'testing')

24.使用手写数字数据集,随机森林算法进行分类,参数n_estimators选择范围为[10,20,40,80,160,250],画出验证曲线

from sklearn.model_selection import validation_curve
X,y = datasets.load_digits(return_X_y=True)
param_range = [10,20,40,80,160,250]

train_score,test_score = validation_curve(RandomForestClassifier(),X,y,param_name='n_estimators',param_range=param_range,cv=10,scoring='accuracy')

train_score =  np.mean(train_score,axis=1)
test_score = np.mean(test_score,axis=1)

plt.plot(param_range,train_score,'o-',color = 'r',label = 'training')
plt.plot(param_range,test_score,'o-',color = 'g',label = 'testing')

25.使用网格搜索,得手写数字数据集+随机森林算法的最优参数

from sklearn.model_selection import GridSearchCV
X,y = datasets.load_digits(return_X_y=True)
# 随机森林的参数
tree_param_grid={'min_samples_split':[3,6,9],'n_estimators':[10,50,100]}
grid=GridSearchCV(RandomForestClassifier(),param_grid=tree_param_grid,cv=5)
grid.fit(X,y)
grid.best_estimator_,grid.best_score_,grid.best_params_

26.取鸢尾花数据集中,类型=0,1的数据,变成一个二分类问题,使用线性内核的SVM进行拟合

from sklearn import svm
X,y = datasets.load_iris(return_X_y=True)
X, y = X[y != 2], y[y != 2]

# 加一些噪音,不然模型太准了
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape
X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3,random_state=0)

svm = svm.SVC(kernel='linear', probability=True)

svm.fit(X_train, y_train)

27.计算出对应的ROC曲线

from sklearn.metrics import roc_curve, auc

y_score = svm.decision_function(X_test)

fpr,tpr,threshold = roc_curve(y_test, y_score)

plt.plot(fpr, tpr, color='darkorange')
plt.plot([0, 1], [0, 1], color='navy', linestyle='--')

28.计算出对应的AUC

roc_auc = auc(fpr,tpr) 
roc_auc

六、降维
29.生成一组数据,10000个样本,3个特征,4个簇

from mpl_toolkits.mplot3d import Axes3D
from sklearn.decomposition import PCA

X, y = datasets.make_blobs(n_samples=10000, n_features=3, centers=[[3,3, 3], [0,0,0], [1,1,1], [2,2,2]], cluster_std=[0.2, 0.1, 0.2, 0.2], 
                  random_state =9)

fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
plt.scatter(X[:, 0], X[:, 1], X[:, 2],marker='o')

30.对数据进行pca同纬度数量的投影,展示投影后的三个维度的分布

pca = PCA(n_components=3)
pca.fit(X)
print (pca.explained_variance_ratio_)
print (pca.explained_variance_)

31.将3维数据降到2维

pca = PCA(n_components=2)
pca.fit(X)
print (pca.explained_variance_ratio_)
print (pca.explained_variance_)

X_new = pca.transform(X)
plt.scatter(X_new[:, 0], X_new[:, 1],marker='o')

32.指定降维后主成分方差的比例(99%)进行降维

pca = PCA(n_components=0.99)
pca.fit(X)
print (pca.explained_variance_ratio_)
print (pca.explained_variance_)
print (pca.n_components_)

33.使用MLE算法,自动选择降维维度

pca = PCA(n_components='mle')
pca.fit(X)
print (pca.explained_variance_ratio_)
print (pca.explained_variance_)
print (pca.n_components_)

34.生成一组数据,10000个样本,3个特征,4个类别

X2, y2 = datasets.make_classification(n_samples=1000, n_features=3, n_redundant=0, n_classes=3, n_informative=2,
                           n_clusters_per_class=1,class_sep =0.5, random_state =10)
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
ax.scatter(X2[:, 0], X2[:, 1], X2[:, 2],marker='o',c=y2)

35.对数据进行LDA降维

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
lda.fit(X2,y)
X2_new = lda.transform(X)
plt.scatter(X2_new[:, 0], X2_new[:, 1],marker='o',c=y2)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容