机器学习开发流程
1、获取数据 2、数据处理3、特征工程 4、机器学习算法训练-模型 5、模型评估 6、应用
学习初期数据:
1、sklearnscikit-learn: machine learning in Python — scikit-learn 1.5.2 documentation
2、kaggle Find Open Datasets and Machine Learning Projects | Kaggle
\ 3、UCIHome - UCI Machine Learning Repository
1)sklearn数据集
import sklearn.datasets
load_#获取小规模的数据集
fetch_#获取大规模数据集
#加载并返回鸢尾花数据集
sklearn.datasets.load_iris()
#加载并返回波士顿房价数据集
sklearn.datasets.load_boston()
#大数据集
skelarn.datasets.fetch_20newgroups(data_home=None,subset='train')
#all就是全下,train训练集,test测试机
sklearn数据集返回值介绍
data:特征数据数组是numpy.ndarray数组
target:标签数组,是一维数组
DESCR:数据描述
feature_name:特证名
target_names:标签名
from sklearn.datasets import load_iris
def datasets_demo():
iris=load_iris()
# print(iris)
print(iris["DESCR"])
print(iris.feature_name)
return None
datasets_demo()
构建测试集在20%~30%左右
训练返回顺序为训练集特征值、测试集特征值、训练集目标值、测试集目标值
x_train,x_text、y_train、y_text
2) 特征工程
用sklearn 做特征工程
字典特征提取--类别转化为one-hot
from sklearn.feature_extraction import DictVectorizer
def dict_demo():
data=[{'city':'北京','temperature':100},{'city':'上海','temperature':'60'},{'city':'北京','temperature':'60'}]
#实例化一个转换器
#返回二维数组不要sparese
transfer=DictVectorizer(sparse=False)
#调用fit——transfer
data_new=transfer.fit_transform(data)
print("data_new",data_new)
#返回一个spass矩阵
return None
dict_demo()
3)对文本进行特征提取
单词、作为特征词
1.text.CountVectorizer
统计每个样本特征词出现的个数
from sklearn.feature_extraction.text import CountVectorizer
def count_demo():
"""文本特征抽取"""
data=["life is short, i like likle python","life is too long , i dislike python"]
transfer = CountVectorizer(stop_words=["is","too"])
#调用fit 并且设为
data_new = transfer.fit_transform(data).toarray()
print(data_new)
return None
count_demo()
中文文本特征提取
def count_chinese_demo2():
"""中文文本特征抽取,自动分词"""
data=["今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃","我们看到的从很远星系来的光是在几百万年之前发出的这样当我们看到宇宙时,我们是在看它的过去","如果只用一种方式了解某样事物,你就不会真正了解它了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系"]
#先转化为列表后join近空格为字符串
a=cut_Word(data)
#转为集合
a=set(a)
#集合转字符串
print("".join(map(str, a)))
a="".join(a)
#实例化一个转换器类
transfer=CountVectorizer()
#调用fit_transform
data_new=transfer.fit_transform(data)
print("data_new:\n",data_new.toarray())
print("特征名字:\n",transfer.get_feature_names_out())
return None
def cut_Word(text):
"""中文分词"""
return [" ".join(jieba.cut(sentence)) for sentence in text]
count_chinese_demo2()
如何找出在文本中较为重要的词汇Tf-idf文本特征提取
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他
文章中很少出现,则认为此词或者短语身有很好的类别区分能力,适合用来分类。
TF是该词在文章中出现的频率,IDF总文件数目除以包含该词语的文件数目
def tfidf_demo():
import jieba
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
def cut_Word(text):
"""中文分词"""
return [" ".join(jieba.cut(sentence)) for sentence in text]
def count_chinese_demo2():
"""中文文本特征抽取,自动分词"""
data = [
"今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃",
"我们看到的从很远星系来的光是在几百万年之前发出的这样当我们看到宇宙时,我们是在看它的过去",
"如果只用一种方式了解某样事物,你就不会真正了解它了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系"
]
# 中文分词
a = cut_Word(data) # a 是一个包含分词结果的列表
# 实例化 CountVectorizer
count_transfer = CountVectorizer()
# 调用 fit_transform,使用分词后的结果
data_new = count_transfer.fit_transform(a)
print("CountVectorizer data_new:\n", data_new.toarray())
print("特征名字:\n", count_transfer.get_feature_names_out())
# 实例化 TfidfVectorizer
tfidf_transfer = TfidfVectorizer()
# 调用 fit_transform
tfidf_data_new = tfidf_transfer.fit_transform(a)
print("TF-IDF data_new:\n", tfidf_data_new.toarray())
print("TF-IDF 特征名字:\n", tfidf_transfer.get_feature_names_out())
return None
count_chinese_demo2()
特征预处理—通过一些转换函数将特征数据转化成更适合算法模型的特征数据过程
1)归一化2)标准化
归一化)将原有的数据映射到【0,1】之间
def minmax_demo():
"""
归一化
"""
#读取数据
data=pd.read_csv("xxxxx")
#2、实例化一个转换器
transfer=MinMaxScaler()
#调用ift_transform
data_new=transfer.fit_transform(data)
return None
归一化无法有效的防止异常值、最大值、最小值
标准化
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显
然会发生改变。
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点
对于平均值的影响并不大,从而方差改变较小。
#标准化代码
transfer = StandardScaler()
特征降维
ndarray
维数:嵌套的层数
0维 标量 1维 向量 2维 矩阵 3维 n维
特征选择
从冗余的数据中找到主要特征
判断两个变量是否相关
#计算某两个变量相关系数
r=pearsonr(data["pe_ration"],data["pe_ratio"])
print(r)
主成分分析
降维
n_components=0.95 保留原有的百分之95的特征