sklearn函数记录

记录用到的一些sklearn的函数~

1.关于CountVectorizer

作用:统计所有的训练文本中,每个词语的词频,不考虑文本的顺序,所以,这里统计使用的方法是词袋法(Bag of Words),例如:

from sklearn.feature_extraction.text import CountVectorizer

texts = ['hello how are you', 'you and me', 'bye bye']    # 已经切分好词语的文本列表, 每一个元素表示一个文本
cv = CountVectorizer()
cv_fit = cv.fit_transform(texts)

print(cv.get_feature_names())       # 输出所有的词语组成的词典
# 输出结果:['and', 'are', 'bye', 'hello', 'how', 'me', 'you']

print(cv.vocabulary_)         # 以字典的形式输出所有词语
# 输出结果:{'hello': 3, 'how': 4, 'are': 1, 'you': 6, 'and': 0, 'me': 5, 'bye': 2}

print(cv_fit)       # 输出统计结果
# 输出结果是: 
  (0, 6)	1       (i, j)k 表示 :i是第i个文本, j是j个词语,这里是词典中的序号, k表示词语出现次数
  (0, 1)	1
  (0, 4)	1
  (0, 3)	1
  (1, 5)	1
  (1, 0)	1
  (1, 6)	1
  (2, 2)	2

print(cv_fit.toarray())   # 将统计结果转化为稀疏矩阵的形式
# 输出:
[[0 1 0 1 1 0 1]
 [1 0 0 0 0 1 1]
 [0 0 2 0 0 0 0]]

如果在创建 CountVectorizer的过程中传入 stop_words参数,表示在统计过程中去掉停用词,例如,在上面的例子中传入停用词列表:

stop_words = ['you', 'and']

并将定义语句改成:

cv = CountVectorizer(stop_words=stop_words)

其余部分不用修改,可以看到生成的词典中已经没有停用词了:

['are', 'bye', 'hello', 'how', 'me']
{'hello': 2, 'how': 3, 'are': 0, 'me': 4, 'bye': 1}

上面使用的例子是英文文本,也同样适合中文文本。

2.关于TfidfVectorizer

主要用于计算tf和idf值 用于评估字词对一个文本数据集的重要程度,简单来说,字词的重要程度正比于它在一篇文章中出现的次数(对一篇文章),反比于它在语料库中出现的次数(对所有的文章)
TF(Term Frequency)的计算方法是:词语在文档中出现的次数 / 文档的总词语数
IDF(InverseDocument Frequency)的计算方法是:log [总文档数 /(包含该词的文档数 + 1) ] (这个加1主要是为了防止分母为0,也可以加其他的常数)
使用 TF * IDF 值的结果作为衡量的标准。
例如:

from sklearn.feature_extraction.text import TfidfVectorizer

texts = ['hello how are you', 'how to do this']
stop_words = ['are','to']

tfidf = TfidfVectorizer(stop_words=stop_words)
tfidf_fit = tfidf.fit_transform(texts)

# 输出词典
print(tfidf.get_feature_names())
# 输出:
['do', 'hello', 'how', 'this', 'you']

# 输出词频信息
for term, num in tfidf.vocabulary_.items():
    print(term, num)
# 输出
hello 1
how 2
you 4
do 0
this 3



# 输出TFIDF矩阵
print(tfidf_fit.toarray())
#输出:
[[0.         0.6316672  0.44943642 0.         0.6316672 ]
 [0.6316672  0.         0.44943642 0.6316672  0.        ]]

#上面的TF-IDF矩阵不太清楚,可以输出的清楚些:
for i in range(len(tfidf_fit.toarray())):
    print('doc number:', i)
    for j in range(len(tfidf.get_feature_names())):
        print(tfidf.get_feature_names()[j], ":", tfidf_fit.toarray()[i][j])
# 输出:
doc number: 0
do : 0.0
hello : 0.6316672017376245
how : 0.4494364165239821
this : 0.0
you : 0.6316672017376245
doc number: 1
do : 0.6316672017376245
hello : 0.0
how : 0.4494364165239821
this : 0.6316672017376245
you : 0.0
3.关于LabelEncoder类

使用LabelEncode类可以对数据进行编码(从0开始),例如:

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
le.fit(['a', 'b', 'c', 'd'])

labels = le.transform(['b', 'c', 'a', 'a', 'd', 'd'])
print(labels)

# 输出:
[1 2 0 0 3 3]
4.关于Pipeline

简单理解来说,Pipeline更像是一个管理工具,可以把很多算法任务添加到Pipeline中统一按照流程进行计算,例如拿到一个数据集要进行分类任务,一种思路是:

  • 特征标准化,使用StandardScaler
  • 降维,使用PCA
  • 分类,使用LogisticRegression

一般方式上,先将数据传入到StandardScaler中,拿到结果后,将这个结果传入到PCA中,以此类推,麻烦在于中间过程我们需要用代码进行处理,例如定义中间变量接收中间结果,Pipeline将这三个过程综合起来形成一个完整的流程,那么只需要定义好流程,然后在一开始输入数据,那么中间过程就不用处理了,定义好Pipeline之后,就像使用其他类一样fit就好了,例如:

pi_line = Pipeline([('sc', StandardScaler()),
                    ('pca', PCA(n_components = 2)),
                    ('clf', LogisticRegression(random_state=1)),
                    ])

pi_line.fit(X_train, y_train)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sklearn的逻辑回归模型中,我们可以通过自定义损失函数的方式来绘制损失函数的图像。具体来说,我们可以使用`SGDClassifier`类,并将`loss`参数设置为`'log'`,这样就可以使用逻辑回归的损失函数来进行训练。然后,我们可以绘制每个迭代步骤的损失函数值,从而得到损失函数的图像。 以下是一个例子: ```python import matplotlib.pyplot as plt import numpy as np from sklearn.datasets import make_classification from sklearn.linear_model import SGDClassifier # 生成随机数据集 X, y = make_classification(n_samples=1000, n_features=10, n_classes=2, random_state=42) # 创建逻辑回归模型对象,使用'SGDClassifier'类,并设置'loss'参数为'log',同时设置'verbose'参数为True,以便在训练过程中打印出损失函数值 lr = SGDClassifier(loss='log', verbose=True) # 训练模型,并记录每个迭代步骤的损失函数值 losses = [] for i in range(100): lr.partial_fit(X, y, classes=np.unique(y)) losses.append(lr.loss_function_(lr.coef_, X, y)) # 绘制损失函数图像 plt.plot(losses) plt.xlabel('Iteration') plt.ylabel('Loss') plt.show() ``` 在上面的代码中,我们使用`make_classification`函数生成了一个随机数据集,然后创建了一个`SGDClassifier`类的对象,并设置了`loss`参数为`'log'`,以便使用逻辑回归的损失函数来进行训练。在训练过程中,我们记录了每个迭代步骤的损失函数值,并将其保存在`losses`列表中。最后,我们使用`matplotlib`库绘制出损失函数的图像。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值