CS_sklearn_1 Tutorials

sklearn机器学习从入门到入土

  • 本系列文旨在记录自己在使用skearn当中做的项目和经验,为以后的自己提供一些参考.
  • 平时自己总是间隔很长一段时间再拿起来某些东西,这样自然而然就会有些遗忘,甚至连最基本的东西也会遗忘,所以就写下这些系列文章作为以后的参考,也给初学者一个指引
  • 本文建议对python基础很强,并自学能力很强的人阅读,如果python基础并不扎实,建议读我以前写的文章python_basic

环境搭建

  本系列文章使用的是Jupyter lab和jupyter
  建议从anaconda中安装jupyter lab,安装anaconda就不过多赘述,看之前写的文章就行
  启动jupyter lab建议

数据导入

  第一步一般都是读取数据这里一般使用pandas读取csv或者xlsx文件

#读取xlsx
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, 
              usecols=None, squeeze=False,dtype=None, engine=None, 
              converters=None, true_values=None, false_values=None, 
              skiprows=None, nrows=None, na_values=None, parse_dates=False, 
              date_parser=None, thousands=None, comment=None, skipfooter=0, 
              convert_float=True, **kwds)

#读取csv
pd.read_csv("./pre_data.csv")

详细说明 https://blog.csdn.net/weixin_38546295/article/details/83537558

Dataframedata.isna().sum() 统计每一列有没有空值

test_dataset = dataset.drop(train_dataset.index) 删除某个行标签的数据

test_dataset = dataset.drop(columns="Weight") 删除某一列

train_dataset = dataset.sample(frac=0.8,random_state=0) 随机抽样,frac 取样本的80%

pre_train_data.keys() 和 pddata.columns 效果一样 获取column label

pddata.iloc[1:,0] 第二行到最后,第一列

pcadata[["净利润增长率(%)_Netprfgrrt"]] 取子集 好处是能取多列

pcadata.info() object类型就是有空格

concat 连接 axes=0,=1

降维算法

数据预处理

最简单的案例

   先放一个超级简单的PCA降维例子

x = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
print(x)
# [[-1 -1]
#  [-2 -1]
#  [-3 -2]
#  [ 1  1]
#  [ 2  1]
#  [ 3  2]]
pca = PCA(n_components=1) # 降成一维
newx = pca.fit_transform(x) # 获取结果矩阵
print(newx)
#  [[ 1.38340578]
#  [ 2.22189802]
#  [ 3.6053038 ]
#  [-1.38340578]
#  [-2.22189802]
#  [-3.6053038 ]]
print(pca.explained_variance_ratio_) # 查看结果矩阵的各贡献度
# [0.99244289]

iris案例

    接下来用iris_data来做一个PCA案例
    第一步导入包和数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA

iris_data = load_iris();
y = iris_data.target
x = iris_data.data
print(x.shape) # (150, 4)
pd.DataFrame(x)

   然后查看可以降到几维
   当参数n_components中不填写任何值,则默认返回min(X.shape)个特征,一般来说,样本量都会大于特征数目, 所以什么都不填就相当于转换了新特征空间,但没有减少特征的个数。一般来说,不会使用这种输入方式。但我们 却可以使用这种输入方式来画出累计可解释方差贡献率曲线,以此选择最好的n_components的整数取值。

pca_line = PCA().fit(x.data) 
print(x.data.shape) #(150, 4)
print(np.arange(1,x.data.shape[1]+1)) # np.arange() 返回固定步长的数组 [1 2 3 4]
plt.plot([1,2,3,4],np.cumsum(pca_line.explained_variance_ratio_)) 
plt.xticks([1,2,3,4]) #这是为了限制坐标轴显示为整数
plt.xlabel("number of components after dimension reduction") 
plt.ylabel("cumulative explained variance ratio")
plt.show()

在这里插入图片描述
   经过上一步之后就可以发现降到二维是比较合适的选择

pca = PCA(n_components=2) # 降到二维
pca = pca.fit(x)
x_dr = pca.transform(x)
# print(x_dr)
print(x_dr[:,0][y == 1]) # 降维之后第一列中y ==1 的x数据
print(x_dr.shape) # (150, 2)
print(min(x.shape)) # 4

   降维之前的图像

colors = ['red', 'black', 'orange']
plt.figure
for i in [0,1,2]:
    plt.scatter(x[:,0][y == i],x[:,1][y == i],alpha=.7,c = colors[i],label = iris_data.target_names[i])
plt.legend()
plt.title('IRIS dataset')
plt.show()

在这里插入图片描述
   降维之后的图像

# 降维之后的图像

colors = ['red', 'black', 'orange']
plt.figure()
for i in [0, 1, 2]:
    plt.scatter(x_dr[y == i, 0],x_dr[y == i, 1] # 取y == i 数据的第0列和第1列
                ,alpha=0.7
                ,c=colors[i]
                ,label=iris_data.target_names[i]
               )
plt.legend()
plt.title('PCA of IRIS dataset')
plt.show()

在这里插入图片描述
   比较重要的几个数据

print(pca.explained_variance_) # 可解释性方差大小  [4.22824171 0.24267075]
print(pca.explained_variance_ratio_) # 方差贡献率 [0.92461872 0.05306648]
print(pca.explained_variance_ratio_.sum())  # 0.9776852063187949

   另外一个选择维度的方法,除了输入整数,n_components还有哪些选择呢? 勤奋智慧的数学大神Minka, T.P.在麻省理工学院媒体实验室做研究时找出了让PCA用最大似然估计(maximum likelihood estimation)自选超参数的方法

pca_mle = PCA(n_components="mle")
pca_mle = pca_mle.fit(x)
x_mle = pca_mle.transform(x)
x_mle.shape

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值