IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习概述与特征工程 -> 正文阅读

[人工智能]机器学习概述与特征工程

机器学习概述

1.1 人工智能概述

  • 达特茅斯会议-人工智能的起点
  • 机器学习是人工智能的一个实现途径
  • 深度学习是机器学习的一个方法发展而来

1.1.2 机器学习、深度学习能做些什么

  • 传统预测
  • 图像识别
  • 自然语言处理

1.2 什么是机器学习

  • 数据
  • 模型
  • 预测

从历史数据当中获得规律?这些历史数据是怎么的格式?

1.2.3 数据集构成

  • 特征值 + 目标值

有的时候可能是没有目标值的:目标特征分类

1.3 机器学习算法分类

监督学习

定义︰输入数据是由输入特征值和目标值所组成。函数的输出可以是一个连续的值(称为回归),或是输出是有限个离散值(称作分类)

  • 目标值:类别 - 分类问题
    k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归

  • 目标值:连续型的数据 - 回归问题
    线性回归、岭回归

无监督学习

定义∶输入数据是由输入特征值所组成。

  • 目标值:无 - 无监督学习
    聚类 k-means
    在这里插入图片描述
    例子:
    1、预测明天的气温是多少度? 回归
    2、预测明天是阴、晴还是雨? 分类
    3、人脸年龄预测? 回归/分类
    4、人脸识别? 分类

1.4 机器学习开发流程

1)获取数据
2)数据处理
3)特征工程
4)机器学习算法训练 - 模型
5)模型评估
6)应用
在这里插入图片描述

1.5 学习框架和资料介绍

1)算法是核心,数据与计算是基础
2)找准定位
大部分复杂模型的算法设计都是算法工程师在做,而我们

  • 分析很多的数据
  • 分析具体的业务
  • 应用常见的算法
  • 特征工程、调参数、优化

3)怎么做?

  1. 入门
  2. 实战类书籍
    • 机器学习 -”西瓜书”- 周志华
    • 统计学习方法 - 李航
    • 深度学习 - “花书”

4)1.5.1 机器学习库与框架

特征工程

2.1 数据集

2.1.1 可用数据集

公司内部 百度
数据接口 花钱
数据集

学习阶段可以用的数据集:
1)sklearn
2)kaggle
3)UCI

Scikit-learn工具介绍

注意:
安装scikit-learn需要Numpy, Scipy等库

错误记录

安装sklearn过慢或出现错误Cannot determine archive format of C:\Users\22164\AppData\Local\Temp\pip-req

解决方案:
更换清华pip源

参考链接:

2.1.2 sklearn数据集

  1. sklearn.datasets
    load_* 获取小规模数据集
    fetch_* 获取大规模数据集

  2. sklearn小数据集
    sklearn.datasets.load_iris()

  3. sklearn大数据集
    sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)

  4. 数据集的返回值
    datasets.base.Bunch(继承自字典)
    dict[“key”] = values
    bunch.key = values

思考:拿到的数据是否全部都用来训练一个模型?

2.1.3 数据集的划分

训练数据:用于训练,构建模型
测试数据:在模型检验时使用,用于评估模型是否有效

测试集 20%~30%
sklearn.model_selection.train_test_split(arrays, *options)

训练集特征值,测试集特征值,训练集目标值,测试集目标值
x_train, x_test, y_train, y_test

示例

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split


def datasets_test():
    """sklearn数据集使用"""
    # 获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n", iris)
    # sepal:花萼  petal:花瓣
    # print("查看数据集描述:\n", iris["DESCR"])
    print("查看数据集描述:\n", iris.DESCR)
    print("查看特征值名字:\n", iris.feature_names)
    print("查看特征值:\n", iris.data, iris.data.shape)

    # 数据集划分,参数分别为:特征值,目标值,测试集比例(默认0.25),随机数种子
    # x_train = 训练集特征值, x_test = 测试集特征值, y_train = 训练集目标值, y_test = 测试集目标值
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("查看训练集特征值:\n", x_train, x_train.shape)

2.2 特征工程介绍

算法 特征工程

2.2.1 为什么需要特征工程(Feature Engineering)

2.2.2 什么是特征工程

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

意义:会直接影响机器学习的效果

sklearn 特征工程
pandas 数据清洗、数据处理

  • 特征抽取/特征提取
    • 机器学习算法 - 统计方法 - 数学公式
      • 文本类型 -》 数值
      • 类型 -》 数值

2.3 特征抽取

2.3.1 特征提取

1. 将任意数据(如文本或图像)转换为可用于机器学习的数字特征

注: 特征值化是为了计算机更好的去理解数据

字典特征提取(特征离散化)
文本特征提取
图像特征提取(深度学习将介绍)

2. 特征提取API

sklearn.feature_extraction

2.3.2 字典特征提取 - 类别 -> one-hot编码

sklearn.feature_extraction.DictVectorizer(sparse=True,…)

vector 数学:向量 物理:矢量
矩阵 matrix 二维数组
向量 vector 一维数组

父类:转换器类 transfer
返回sparse矩阵

示例

字典特征抽取

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer


def dict_extract():
    """字典特征抽取"""
    data = [{'city': '北京', 'temperature': 100},
            {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]
    # 1.实例化一个转换器类
    transfer = DictVectorizer()
    # 2.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_mew:", data_new)

结果:
sparse=True时(默认),返回的是个稀疏矩阵
在这里插入图片描述

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer


def dict_extract():
    """字典特征抽取"""
    data = [{'city': '北京', 'temperature': 100},
            {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]
    # 1.实例化一个转换器类
    transfer = DictVectorizer(sparse=False)
    # 2.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_mew:", data_new)
    # 获取特征名字
    print("特征名字:", transfer.get_feature_names())

sparse=False时,返回的是个one-hot编码的二维数组
在这里插入图片描述

sparse稀疏
将非零值按位置表示出来
节省内存 - 提高加载效率

字典特征抽取的应用场景:

  • 1)pclass, sex 数据集当中类别特征比较多
    1. 将数据集的特征-》字典类型
    2. DictVectorizer转换
  • 2)本身拿到的数据就是字典类型

2.3.3 文本特征提取

单词 作为 特征
句子、短语、单词、字母
特征:特征词

方法1:CountVectorizer

统计每个样本特征词出现的个数

示例

文本特征提取,统计每个样本特征词出现的个数

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer


def text_extract():
    """文本特征抽取"""
    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1.实例化一个转换器类
    transfer = CountVectorizer()
    # 2.调用fit_transform
    data_new = transfer.fit_transform(data)
    # CountVectorizer是没有sparse参数的,不过这个'scipy.sparse.csr.csr_matrix'类里有toarray()方法,可以直接调用
    # DictVectorizer也有toarray()方法
    print("data_new:", data_new.toarray(), type(data_new))
    print("特征名字:", transfer.get_feature_names())

结果:
在这里插入图片描述
注意:
CountVectorizer是没有sparse参数的,不过这个’scipy.sparse.csr.csr_matrix’类里有toarray()方法,可以直接调用
同样的,DictVectorizer也有toarray()方法

sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
stop_words停用的词表(以列表的形式传入)
停用词表

示例

中文文本特征提取

def text_extract_chinese():
    """中文文本特征抽取"""
    data = ["我 爱 北京 天安门", "天安门 上 太阳 升"]
    # 1.实例化一个转换器类
    transfer = CountVectorizer()
    # 2.调用fit_transform
    data_new = transfer.fit_transform(data)
    # CountVectorizer是没有sparse参数的,不过这个'scipy.sparse.csr.csr_matrix'类里有toarray()方法,可以直接调用
    # DictVectorizer也有toarray()方法
    print("data_new:", data_new.toarray(), type(data_new))
    print("特征名字:", transfer.get_feature_names())

结果:
在这里插入图片描述
注意:
中文如果直接使用CountVectorizer是得不出正确结果的。英文默认是以空格分开的,其实就达到了一个分词的效果,所以我们要对中文进行分词处理。

示例

中文文本特征抽取,使用jieba库完成自动分词

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer
import jieba


def text_extract_chinese_auto():
    """中文文本特征抽取,自动分词"""
    data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
            "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
            "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]

    # 1.将中文文本进行分词
    data_new = []
    for sent_text in data:
        data_new.append(cut_words(sent_text))
    # print(data_new)

    # 2.实例化一个转换器类
    transfer = CountVectorizer()

    # 3.调用fit_transform
    data_result = transfer.fit_transform(data_new)
    print("data_new:", data_result.toarray())
    print("特征名字:", transfer.get_feature_names())

结果:
在这里插入图片描述
关键词:在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少

方法2:TfidfVectorizer

TF-IDF - 用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

主要思想是:某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

  • TF - 词频(term frequency,tf):某一个给定的词语在该文件中出现的频率
  • IDF - 逆向文档频率:是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到
    t f i d f i , j = t f i , j × i d f i , j tfidf_{i,j} = tf_{i,j}×idf_{i,j} tfidfi,j?=tfi,j?×idfi,j?

两个词 “经济”,“非常”
1000篇文章-语料库
100篇文章 - “非常”
10篇文章 - “经济”

两篇文章
文章A(100词) : 10次“经济” TF-IDF:0.2
tf:10/100 = 0.1
idf:lg 1000/10 = 2
文章B(100词) : 10次“非常” TF-IDF:0.1
tf:10/100 = 0.1
idf: log 10 1000/100 = 1

示例

使用TF-IDF进行中文文本特征抽取

def tfidf_text_extract_chinese_auto():
    """tfidf中文文本特征抽取,自动分词"""
    data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
            "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
            "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]

    # 1.将中文文本进行分词
    data_new = []
    for sent_text in data:
        data_new.append(cut_words(sent_text))
    # print(data_new)

    # 2.实例化一个转换器类
    transfer = TfidfVectorizer()

    # 3.调用fit_transform
    data_result = transfer.fit_transform(data_new)
    print("data_new:", data_result.toarray())
    print("特征名字:", transfer.get_feature_names())

结果:
返回的是带权重的矩阵
在这里插入图片描述

2.4 特征预处理

2.4.1 什么是特征预处理

通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

为什么我们要进行归一化/标准化?
特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征

  • 需要用到一些方法进行无量纲化,使不同规格的数据转换到同一规格

2.4.2 归一化

通过对原始数据进行变换把数据映射到(默认为[0,1])之间

在这里插入图片描述
缺点:鲁棒性较差
归一化异常值为最大值、最小值的时候,归一化结果描述数据不够准确。

应用场景:只适合传统精确小数据场景。

sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
MinMaxScalar.fit_transform(X)

X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array

示例

数据归一化处理

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler
import jieba
import pandas as pd


def normalization():
    """归一化"""
    # 1.获取数据
    data = pd.read_csv("dating.txt")  # 使用pandas库导入数据文件
    # print("data:\n", data)
    data = data.iloc[:, :3]  # 获取所有行,前三列
    print("data:\n", data)
    # 2.实例化一个转换器类
    transfer = MinMaxScaler()  # 默认范围0-1
    # transfer = MinMaxScaler(feature_range=[2, 3])  # 范围2-3
    # 3.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

结果:
在这里插入图片描述
注意:
导入文件的时候需要使用pandas库

2.4.3 标准化

通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
在这里插入图片描述
在这里插入图片描述
(x - mean) / std
标准差:集中程度

应用场景:
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

sklearn.preprocessing.StandardScaler( )
处理之后每列来说所有数据都聚集在均值0附近标准差差为1
StandardScaler.fit_transform(X)

X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array

示例

数据标准化处理

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler, StandardScaler
import jieba
import pandas as pd

def normalization():
    """归一化"""
    # 1.获取数据
    data = pd.read_csv("../usingFiles/dating.txt")  # 使用pandas库导入数据文件
    # print("data:\n", data)
    data = data.iloc[:, :3]  # 获取所有行,前三列
    print("data:\n", data)
    # 2.实例化一个转换器类
    transfer = MinMaxScaler()  # 默认范围0-1
    # transfer = MinMaxScaler(feature_range=[2, 3])  # 范围2-3
    # 3.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

结果:
在这里插入图片描述

2.5特征降维

2.5.0 降维概念

ndarray
维数:嵌套的层数
0维 标量
1维 向量
2维 矩阵
3维
n维

此处降维针对二维数组而言
此处的降维:降低特征的个数
降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程。

效果:特征与特征之间不相关

降维的两种方式:

  • 特征选择
  • 主成分分析(可以理解一种特征提取的方式)

2.5 降维

2.5.1 特征选择

定义:数据中包含冗余或无关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。

Filter过滤式

  • 方差选择法:低方差特征过滤
    特征方差小:某个特征大多样本的值比较相近
    特征方差大:某个特征很多样本的值都有差别
    sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
    删除所有低方差特征
    Variance.fit_transform(X)

X:numpy array格式的数据[n_samples,n_features]
返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。

  • 相关系数 - 特征与特征之间的相关程度
    取值范围:–1≤ r ≤+1
    皮尔逊相关系数
    0.9942

特征与特征之间相关性很高:
1)选取其中一个
2)加权求和
3)主成分分析

示例

过滤低方差特征,查看特征之间的相关性

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
import jieba
import pandas as pd


def variance_election():
    """过滤低方差特征"""
    # 1.获取数据
    data = pd.read_csv("../usingFiles/factor_returns.csv")  # 使用pandas库导入数据文件
    data = data.iloc[:, 1:-2]
    print("data:\n", data)
    # 2.实例化一个转换器类
    transfer = VarianceThreshold(threshold=5)  # 删除方差低于threshold的特征
    # 3.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new, data_new.shape)
    
    # 4.计算某两个变量之间的相关性
    r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])  # 列名来访问DataFrame里面的数据,参考https://www.jianshu.com/p/ebb64a159104
    print("pe_ratio与pb_ratio相关系数:\n", r1)
    r2 = pearsonr(data['revenue'], data['total_expense'])
    print("revenue与total_expense相关系数:\n", r2)

结果:
在这里插入图片描述

Embeded嵌入式

决策树 第二天
正则化 第三天
深度学习 第五天
主成分分析

2.6.1 主成分分析(PCA)

sklearn.decomposition.PCA(n_components=None)
n_components
小数 表示保留百分之多少的信息
整数 减少到多少特征

示例

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.feature_selection import VarianceThreshold
from sklearn.decomposition import PCA
from scipy.stats import pearsonr
import jieba
import pandas as pd


def pca():
    """PCA降维"""
    data = [[2, 8, 4, 5],
            [6, 3, 0, 8],
            [5, 4, 9, 1]]
    # 1.实例化一个转换器类
    # n_components  小数表示保留百分之多少的信息  整数:减少到多少特征
    transfer = PCA(n_components=2)
    # 2.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

结果:
在这里插入图片描述

2.6.2 案例:探究用户对物品类别的喜好细分

用户 物品类别
user_id aisle
1)需要将user_id和aisle放在同一个表中 - 合并
2)找到user_id和aisle - 交叉表和透视表
3)特征冗余过多 -> PCA降维

示例

探究用户对物品类别的喜好细分降维

def homework():
    """探究用户对物品类别的喜好细分降维"""
    # 1、获取数据集
    # ·商品信息- products.csv:
    # Fields:product_id, product_name, aisle_id, department_id
    # ·订单与商品信息- order_products__prior.csv:
    # Fields:order_id, product_id, add_to_cart_order, reordered
    # ·用户的订单信息- orders.csv:
    # Fields:order_id, user_id,eval_set, order_number,order_dow, order_hour_of_day, days_since_prior_order
    # ·商品所属具体物品类别- aisles.csv:
    # Fields:aisle_id, aisle

    products = pd.read_csv("../usingFiles/instacart/products.csv")
    order_products = pd.read_csv("../usingFiles/instacart/order_products__prior.csv")
    orders = pd.read_csv("../usingFiles/instacart/orders.csv")
    aisles = pd.read_csv("../usingFiles/instacart/aisles.csv")

    # 2、合并表,将user_id和aisle放在一张表上
    # 1)合并orders和order_products on=order_id tab1:order_id, product_id, user_id
    # 左表,右表,默认内连接,按"order_id"字段进行合并
    tab1 = pd.merge(orders, order_products, on=["order_id", "order_id"])
    # 2)合并tab1和products on=product_id tab2:aisle_id
    tab2 = pd.merge(tab1, products, on=["product_id", "product_id"])
    # 3)合并tab2和aisles on=aisle_id tab3:user_id, aisle
    tab3 = pd.merge(tab2, aisles, on=["aisle_id", "aisle_id"])  # 总的大表

    # 3、交叉表处理,把user_id和aisle进行分组
    table = pd.crosstab(tab3["user_id"], tab3["aisle"])  # 将大表分组
    print("table.shape", table.shape)  # (206209, 134)

    # 4、主成分分析的方法进行降维
    # 1)实例化一个转换器类PCA
    transfer = PCA(n_components=0.95)  # 减少至0.95的特征
    # 2)fit_transform
    data = transfer.fit_transform(table)

    print("data.shape:", data.shape)  # (206209, 44),较之前134个特征,明显减少了很多

结果:
特征减少了90个
在这里插入图片描述

总结

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:12:14  更:2021-08-25 12:13:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:43:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码