当前位置: 首页 > article >正文

机器学习(1)

一、机器学习

机器学习(Machine Learning, ML)是人工智能(Artificial Intelligence, AI)的一个分支,它致力于开发能够从数据中学习并改进性能的算法和模型。机器学习的核心思想是通过数据和经验自动优化算法,而不是通过显式的编程规则。

1.1、机器学习的基本概念

  • 数据:机器学习的基础是数据。数据可以是结构化的(如数据库中的表格数据)或非结构化的(如文本、图像、音频等)。

  • 模型:模型是机器学习算法的核心,它是一个数学表示,用于从输入数据中学习并做出预测或决策。

  • 学习:学习是指模型通过数据进行训练,调整其内部参数以最小化预测误差的过程。

  • 特征:特征是数据中的变量或属性,模型使用这些特征来进行预测或分类。

  • 标签:标签是数据中的目标变量,模型通过学习特征和标签之间的关系来进行预测。

1.2、机器学习的分类

  • 监督学习
  • 半监督学习
  • 无监督学习
  • 强化学习

二、机器学习步骤

  • 收集数据:数据是机器学习的基础。
  • 准备数据:高质量的数据才能提高模型精准度。
  • 训练模型:对处理后的数据进行训练,并留存部分数据用作验证。
  • 评估模型:对模型进行验证,确定模型的精准度。
  • 提高性能:对代码和模型进行优化。

2.1、前期准备——scikit-learn的安装

执行下面的代码

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn

pip install scikit-learn

2.2、数据集

2.2.1、数据集的分类
  • 玩具数据集:轻量的数据集,直接在sklearn库本地,无需下载
    在这里插入图片描述
    示例:
from sklearn.datasets import load_iris # type: ignore

iris = load_iris() # type: ignore
print(iris.data)
  • 现实数据集:数据量大,需要从网络上下载
    在这里插入图片描述
from sklearn.datasets import fetch_20newsgroups #这是一个20分类的数据

news = fetch_20newsgroups(data_home=None,subset='all')
print(len(news.data))
2.2.2、数据集的操作
# data 特征
# feature_names 特征描述
# target  目标
# target_names  目标描述
# DESCR 数据集的描述
# filename 下后到本地保存后的文件名
2.2.3、读取本地文件
本地csv文件
import pandas as pd # type: ignore

data = pd.read_csv('../dataset/ss.csv')
print(data)
本地ecxel文件

在读取excel文件时,需要使用openpyxl来读取,
我是用pip命令来安装的该引擎

pip install openpyxl
import pandas as pd# type: ignore

# 指定使用 openpyxl 引擎来读取 Excel 文件
data = pd.read_excel('../dataset/ss.xlsx', engine='openpyxl')
# print(data)

# 选择特定的列
x = data.iloc[:, [0, 1, 2]]
y = data.iloc[:, [-2]]

# print(x)
print(y)
2.2.4、数据集的划分
数据集划分函数
from sklearn.model_selection import train_test_split # type: ignore
参数注释

参数
(1) *array
这里用于接收1到多个"列表、numpy数组、稀疏矩阵或padas中的DataFrame"。
(2) **options, 重要的关键字参数有:
test_size 值为0.0到1.0的小数,表示划分后测试集占的比例
random_state 值为任意整数,表示随机种子,使用相同的随机种子对相同的数据集多次划分结果是相同的。否则多半不同
strxxxx 分层划分,填y
2 返回值说明
返回值为列表list, 列表长度与形参array接收到的参数数量相关联, 形参array接收到的是什么类型,list中对应被划分出来的两部分就是什么类型

list数据数据划分
import numpy as np# type: ignore
from sklearn.model_selection import train_test_split# type: ignore

X=[[11,2,3,31,111],
    [12,2,3,32,112],
    [1,23,3,33,113],
    [14,2,3,34,114],
    [15,2,3,35,115],
    [16,2,3,36,116],
    [1,23,3,36,117],
    [1,23,3,316,118],
    [1,23,3,326,119],
    [1,23,3,336,120]
]
y=[1,1,1,1,1,2,2,2,2,2]
# 打印生成的数据
print("随机生成的x数据:")
print(X)
print("标签y:")
print(y)

# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(X, y, train_size=0.8, stratify=y)

# 打印划分结果
print("训练集 x_train:\n")
print(x_train)
print("测试集 x_test:\n")
print(x_test)
print("训练集标签 y_train:\n")
print(y_train)
print("测试集标签 y_test:\n")
print(y_test)
ndarray的数据集划分
from sklearn.model_selection import train_test_split# type: ignore
import numpy as np# type: ignore

x = np.arange(100).reshape(50,2)
# print(x)
x_train,x_test = train_test_split(x,test_size=0.8,random_state=42)
print(x_train)
print("----------------------------------")
print(x_test)
dataFrame的数据集划分
import numpy as np# type: ignore
import pandas as pd# type: ignore
from sklearn.model_selection import train_test_split# type: ignore

# 数据集的划分
data = np.arange(1,100).reshape(33, 3)
data = pd.DataFrame(data,columns=['a','b','c'])
# print(data)
x_train,x_test = train_test_split(data,test_size=0.3)
print("\n",x_train)
print("--------------------------")
print("\n",x_test)
玩具数据集划分
# 鸢尾花数据集划分
from sklearn import datasets# type: ignore
from sklearn.model_selection import train_test_split# type: ignore

iris = datasets.load_iris()
x = iris.data
y = iris.target
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=4)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)
print(iris.feature_names)
print(iris.target_names)
现实数据集划分

import numpy as np# type: ignore

from sklearn.datasets import fetch_20newsgroups# type: ignore
from sklearn.model_selection import train_test_split# type: ignore

new_date = fetch_20newsgroups(data_home='../dataset/',subset='train')
# print(new_date.data[0])

x_train,x_test,y_train,y_test = train_test_split(new_date.data,new_date.target,test_size=0.2,random_state=666)
print(np.array(x_train).shape)
print(np.array(x_test).shape)
print(np.array(y_train).shape)
print(np.array(y_test).shape)

print(new_date.target_names)

2.3、特征工程

特征工程api
# DictVectorizer  		字典特征提取
# CountVectorizer 		文本特征提取
# TfidfVectorizer 		TF-IDF文本特征词的重要程度特征提取 
# MinMaxScaler 			归一化
# StandardScaler 		标准化
# VarianceThreshold 	底方差过滤降维
# PCA  					主成分分析降维
#转换器对象调用fit_transform()进行转换, 其中fit用于计算数据,transform进行最终转换fit_transform()可以使用fit()和transform()代替

fit_transform()、fit()和transform()之间的区别

1. fit()
作用: fit() 方法用于计算数据集的统计信息(如均值、方差等),以便后续的转换操作。
返回值: 无返回值,直接在对象内部存储计算结果。
适用场景: 当你需要对训练数据集进行统计信息的计算时使用。

2. transform()
作用: transform() 方法使用 fit() 计算的统计信息对数据集进行转换。
返回值: 返回转换后的数据集。
适用场景: 当你需要对训练数据集或测试数据集进行相同的转换时使用。

3. fit_transform()
作用: fit_transform() 方法结合了 fit() 和 transform() 的功能,先计算统计信息,然后对数据集进行转换。
返回值: 返回转换后的数据集。
适用场景: 当你需要对训练数据集进行一次性计算和转换时使用。
字典的特征提取和数据集划分
from sklearn.feature_extraction import DictVectorizer# type: ignore
from sklearn.model_selection import train_test_split# type: ignore

data_dict = [
    {'city': '北京', 'count':2300,'tempertrye': 41},
    {'city': '上海', 'count':2300,'tempertrye': 39}, 
    {'city': '深圳', 'count':2750,'tempertrye': 30},
    {'city': '广州', 'count':2500,'tempertrye': 40},
    {'city': '杭州', 'count':2800,'tempertrye': 33},
    {'city': '西安', 'count':2700,'tempertrye': 28},
    {'city': '西安', 'count':2700,'tempertrye': 28}
]

# sparse=False:表示返回完整的矩阵,True:表示返回稀疏矩阵
model = DictVectorizer(sparse=False)
data_new = model.fit_transform(data_dict)
# print(data_new)
x_train,y_train = train_test_split(data_new,test_size=0.2,random_state=666)
print(x_train)
print('------------------------------------------------------------------------------')
print(y_train)
文本特征提取

from sklearn.feature_extraction.text import CountVectorizer

corpus =  ['I love machine learning.Its awesome.', 'Its a amazon book', 'Amazon is a great company']

# 创建一个词频提取对象
vectorizer = CountVectorizer(stop_words=['amzzon'])
# 提取特征词频
X = vectorizer.fit_transform(corpus)

print(X)

print(X.toarray())
# 打印特征词频
print(vectorizer.get_feature_names_out())

CountVectorizer 中文本特征提取
中文提取需要用到库jieba

使用下面的命令进行安装

pip install jieba
import jieba
from sklearn.feature_extraction.text import CountVectorizer
# arr = list(jieba.cut("我爱北京天安门"))
# print (arr)
# str01 = ' '.join(arr)
# print (str01)
def my_cut(text):
    #传入没有断词的文本,用jieba分词工具转化为数据容器,然后把数据容器中的元素用空格连接起来
    return ' '.join(list(jieba.cut(text)))

corpus = ['我爱北京天安门','我爱成都天府广场']
# 创建一个词频提取对象
vectorizer = CountVectorizer(stop_words=[])
# 提取词频
data = [my_cut(el) for el in corpus]
x = vectorizer.fit_transform(data) 
# print(x)
# print(x.toarray())
print(vectorizer.get_feature_names_out())

data02 = pd.DataFrame(x.toarray(),columns=vectorizer.get_feature_names_out())
print(data02)

TfidfVectorizer TF-IDF文本特征词的重要程度特征提取
import jieba
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer

def cut_words(text):
    return " ".join(list(jieba.cut(text)))

data = ["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]
data_new = [cut_words(v) for v in data]

transfer = TfidfVectorizer(stop_words=['期间', '做出',"重大贡献"]) 
data_final = transfer.fit_transform(data_new)

pd.DataFrame(data_final.toarray(), columns=transfer.get_feature_names_out())
无量纲化
MinMaxScaler 归一化
data = [
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4]
]
tran = MinMaxScaler(feature_range(1,2))
data = tran.fit_transfrom(data)
print(data)
StandardScaler 标准化
import numpy as np
from sklearn.preprocessing import StandardScaler

# 创建一个示例数据集
X = np.array([[1, 2], [3, 4], [5, 6]])

# 初始化 StandardScaler
scaler = StandardScaler()

# 对训练数据进行 fit_transform
X_train_scaled = scaler.fit_transform(X)

# 打印标准化后的训练数据
print("标准化后的训练数据:")
print(X_train_scaled)

# 创建一个新的测试数据集
X_test = np.array([[7, 8], [9, 10]])

# 对测试数据进行 transform
X_test_scaled = scaler.transform(X_test)

# 打印标准化后的测试数据
print("标准化后的测试数据:")
print(X_test_scaled)

2.4、特征降维

VarianceThreshold 低方差过滤特征选择
# 1、获取数据,data是一个DataFrame,可以是读取的csv文件
data=pd.DataFrame([[10,11],[11,13],[11,11],[11,15],[11,91],[11,13],[11,12],[11,16]])
print("data:\n", data)   
# 2、实例化一个转换器类
transfer = VarianceThreshold(threshold=1)#0.1阈值
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)

PCA降维
from sklearn.dec**** import PCA

data = [
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4]
]
pac = PCA(n_com**** = 0.95)

data = pca.fit_transfrom(data)

print(f"降维后的数据为:{data}"}

http://www.kler.cn/a/394411.html

相关文章:

  • Move AI技术浅析(二):输入与预处理
  • webrtc获取IceCandidate流程
  • webrtc音频模块(三) windows Core Audio API及声音的播放
  • Scala项目(图书管理系统)
  • WebRTC服务质量(08)- 重传机制(05) RTX机制
  • idea2024创建JavaWeb项目以及配置Tomcat详解
  • Substance Painter技巧及心得
  • 自動換IP為什麼會不穩定?
  • shell命令笔记
  • gitlab修改root密码详细详情,高版本通用
  • 35数据库服务器(如MySQL, PostgreSQL)
  • Puppeteer教程:使用CSS选择器点击和爬取动态数据
  • 手机版产品目录如何制作?
  • PdServer:调用MidjourneyAPI完成静夜思图文生成
  • PySpark——Python与大数据
  • 极狐GitLab 发布安全补丁版本17.5.2, 17.4.4, 17.3.7
  • 为什么在Ubuntu下使用VScode开发C++程序时需要手动配置链接库
  • 深入理解js中函数中的形参与实参
  • 基于单片机智能温室大棚监测系统
  • 【ES6】ES6中,如何实现桥接模式?
  • kafka日志清理配置
  • odoo的 self.env 是什么
  • LabVIEW-TestExec SL
  • git上feature合并到development分支
  • 深度解析 Linux 系统下的 top 命令
  • 详细分析ip addr show 查看网络配置的命令