Scikit-learn - 1

获取数据

from sklearn import datasets

# 导入手写数据集
import matplotlib.pyplot as plt
digits = datasets.load_digits()
plt.matshow(digits.images[0])
plt.show()

# 生成数据用于聚类
data, label = datasets.make_blobs(n_samples=100, n_features=2, centers=5)
plt.scatter(data[:, 0], data[:, 1], c=label)
plt.show()

数据预处理

from sklearn import preprocessing

# 计算一组数据的平均值和标准差
data = [[0, 0], [1, 0], [-1, 1], [1, 2]]
scalerstd = preprocessing.StandardScaler().fit(data)
print(scalerstd.mean_)
print(scalerstd.var_)

# 标准化现有数据
scalerstd.transform(data)

# 用最小最大规范化对数据进行线性变换
scalermm = preprocessing.MinMaxScaler(feature_range=(0, 1)).fit(data)
scalermm.transform(data)

# 使用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')

# 对现有数据进行one-hot编码
data = [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]
scaleronehot = preprocessing.OneHotEncoder().fit(data)
scaleronehot.transform(data).toarray()

# 给定阈值,将特征转化为0/1
data = [[0, 0], [1, 0], [-1, 1], [1, 2]]
scalerbin = preprocessing.Binarizer(threshold=0.5)
scalerbin.transform(data)

# 对现有数据进行标签编码
scalerlabel = preprocessing.LabelEncoder()
scalerlabel.fit(["paris", "paris", "tokyo", "amsterdam"])
scalerlabel.transform(["tokyo", "tokyo", "paris"])

数据集拆分

# 将现有数据拆分成训练集和测试集
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)

# 将现有数据划为三折
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]))

使用模型

# 定义一个线性回归模型
from sklearn.linear_model import LinearRegression
model = LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)

# 导入预置的波士顿数据集
X,y = datasets.load_boston(return_X_y=True)

# 设置房价为y,剩余数据为X
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# 用线性回归模型拟合曲线
model.fit(X_train, y_train)

# 用训练完的模型进行预测
model.predict(X_test)

# 输出线性回归模型的斜率和截距
print(model.coef_)
print(model.intercept_)

评估

# 使用随机森林对鸢尾花数据集进行预测
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

# 给产生的随机森林模型打分
clf.score(X,y)

# 输出模型的recision_score, recall_score, f1_score
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

# 使用手写数字数据集,随机森林算法进行分类,画出学习曲线
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')

# 使用手写数字数据集,随机森林算法进行分类,画出验证曲线
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')

# 使用网格搜索,得手写数字数据集+随机森林算法的最优参数
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_

# 取鸢尾花数据集中,变成一个二分类问题,使用线性内核的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)

# 计算对应的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='--')

# 计算对应的AUC曲线
roc_auc = auc(fpr,tpr) 
roc_auc

降维

# 生成一组数据,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')

# 对数据进行pca同纬度数量的投影,展示投影后的三个维度的分布
pca = PCA(n_components=3)
pca.fit(X)
print (pca.explained_variance_ratio_)
print (pca.explained_variance_)

# 将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')

# 指定降维后主成分方差的比例(99%)进行降维
pca = PCA(n_components=0.99)
pca.fit(X)
print (pca.explained_variance_ratio_)
print (pca.explained_variance_)
print (pca.n_components_)

# 使用MLE算法,自动选择降维维度
pca = PCA(n_components='mle')
pca.fit(X)
print (pca.explained_variance_ratio_)
print (pca.explained_variance_)
print (pca.n_components_)

# 生成一组数据,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)

# 对数据进行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阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355