• [技术干货] MoneyPrinterTurbo,利用AI大模型,一键生成高清短视频。
    方案介绍随着AI的迅速发展,自从 OpenAI 发布 Sora 文本生成视频模型后,文本生成视频的 AI 技术引起了无数圈内圈外人士的关注和实验。该解决方案基于MoneyPrinter,为你提供一个文本生成短视频的WebUI应用。只需输入视频主题或关键词,就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐,最后合成一个高清的短视频。开始使用步骤 1 访问该促销活动购买页面,按照如下配置完成AI生成短视频服务器的部署。步骤 2 登录弹性云服务器控制台。使用Linux连接工具登录服务器,或者在控制台单击“远程登录”(建议使用远程连接工具,后续使用过程中需要下载短视频文件)。步骤 3 等待15分钟左右,进入服务器后,查看环境部署日志。输入命令:tail -f /tmp/install-MoneyPrinter-baseENV.log,如下图所示则表示基础环境部署成功(使用Ctrl+C按键即可退出查看日志界面)。步骤 4 修改配置文件,路径为“/home/project/MoneyPrinterTurbo/config.toml”。按照 config.toml 文件中的说明,配置好 pexels_api_keys 和 llm_provider(默认moonshot)相关的 API Key。获取方式请参考https://www.pexels.com/api/(pexels_api_key)和https://platform.moonshot.cn/console/api-keys(moonshot_api_key)。​步骤 5 输入命令:vim /home/project/MoneyPrinterTurbo/config.toml,按下键盘i键,修改pexels_api_keys和moonshot_api_key的值,在键盘按下Esc,输入“:wq”保存。步骤 6 预启动服务。输入如下命令:conda activate MoneyPrinterTurbocd /home/project/MoneyPrinterTurbo/bash webui.sh执行后,输入邮箱地址,即可启动服务。步骤 7 使用Ctrl + C停止服务,使用后台方式启动服务。输入以下命令:conda activate MoneyPrinterTurbocd /home/project/MoneyPrinterTurbo/bash webui.sh > /home/project/MoneyPrinterTurbo/webui.log 2>&1 &步骤 8 登录弹性云服务器控制台。选择购买的服务器,单击服务器名称进入详细页面,在新页面单击“安全组”。步骤 9 单击“配置规则”,选择“入方向规则”。步骤 10 单击“复制”,修改放通8501端口。步骤 11 打开浏览器,输入http://EIP:8501,即可访问WebUI界面。步骤 12 给定一个关键词,使用AI自动生成视频文案。步骤 13 根据页面提示及自身需要,选改参数设置,单击“生成视频”,等待视频自动生成。步骤 14 下拉页面,可以查看当前任务生成的日志。待出现“视频生成完成”,可直接下拉页面,查看或下载生成的视频。常见问题问题一:Read time out. 因为网络波动影响,可能会有视频素材下载失败,报错如下:解决办法:终止此次任务,单击前端页面“stop”停止此次任务。刷新页面,重新发起任务。
  • [技术干货] 2222
    1.Scikit-learn包含内容 Classification分类Regression回归Clustering聚类Dimensionality reduction降维Model selection模型选择Preprocessing特征工程 2.scikit-learn数据集API介绍 sklearn.datasets.load_*():获取小规模数据集,数据包含在datasets里例:sklearn.datasets.load_iris():加载并返回鸢尾花数据集sklearn.datasets.fetch_*(data_home=None):获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是**~/scikit_learn_data/** 3.sklearn数据集的使用 load和fetch返回的数据类型datasets.base.Bunch(字典格式)data:特征数据数组,是[n_samples * n_features]的二维numpy.ndarry数组target:标签数组,是n_samples的一维numpy.ndarry数组DESCR:数据描述feature_names:特征名,新闻数据,手写数字、回归数据集没有target_names:标签名例:from sklearn.datasets import load_irisdef datasets_demo():    """    sklearn数据集使用    :return:    """    # 获取数据集    iris = load_iris()    print("鸢尾花数据集:\n", iris)    print("查看数据集描述:\n", iris["DESCR"])           # 数据集的描述信息    print("查看特征值的名字:\n", iris.feature_names)    print("查看特征值:\n", iris.data, iris.data.shape)  # shape:(150,4)    return Noneif __name__ == "__main__":    datasets_demo() 查看特征值的名字: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] 4.数据集划分 sklearn.model_selection.train_test_split(arrays,*options) x 数据集的特征值y 数据集的标签值test_size测试集的大小,一般为floatrandom_state随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同return训练集特征值,测试集特征值,训练集目标值,测试集目标值 5.特征提取(将任意数据(如文本或图像)转化为可用于机器学习的数字特征) 字典特征提取文本特征提取图像特征提取  (1)字典特征提取作用:对字典数据进行特征值化sklearn.feature_extraction.DictVectorizer(sparse=True, …)DictVectorizer.fit_transform(X), X:字典或者包含字典的迭代器返回值,返回sparse矩阵DictVectorizer.inverse_transform(X), X:array数组或者sparse矩阵 返回值:转换之前数据格式DictVectorizer.get_feature_names():返回类别名称例:from sklearn.feature_extraction import DictVectorizerdef dict_demo():    """    字典特征抽取    :return:    """    data = [{'city':'北京', 'temperature':100},            {'city':'上海', 'temperature':60},            {'city':'深圳', 'temperature':30}]    # 1、实例化一个转换器类    #transfer = DictVectorizer() # 返回sparse矩阵    transfer = DictVectorizer(sparse=False)    # 2、调用fit_transform()    data_new = transfer.fit_transform(data)    print("data_new:\n", data_new)   # 转化后的    print("特征名字:\n", transfer.get_feature_names())    return Noneif __name__ == "__main__":    dict_demo()输出:data_new: [[  0.   1.   0. 100.] [  1.   0.   0.  60.] [  0.   0.   1.  30.]] 特征名字: ['city=上海', 'city=北京', 'city=深圳', 'temperature'] (2)文本特征提取      单词作为特征      作用:对文本数据进行特征值化sklearn.feature_extraction.text.CountVectorizer(stop_words=[]):返回词频矩阵CountVectorizer.fit_transform(X),X:文本或者包含文本字符串的可迭代对象,返回值:返回sparse矩阵CountVectorizer.inverse_transform(X),X:array数组或者sparse矩阵,返回值:转换之前数据格CountVectorizer.get_feature_names():返回值:单词列表①英文文本分词from sklearn.feature_extraction.text import CountVectorizerdef count_demo():    """    文本特征抽取:CountVectorizer    :return:    """    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)    print("data_new:\n", data_new.toarray())  # toarray转换为二维数组    print("特征名字:\n", transfer.get_feature_names())    return Noneif __name__ == "__main__":    count_demo()输出:data_new: [[0 1 1 2 0 1 1 0] [1 1 1 0 1 1 0 1]]特征名字: ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']②停用词:stop_words=[]from sklearn.feature_extraction.text import CountVectorizerdef count_demo():    """    文本特征抽取:CountVectorizer    :return:    """    data = ['life is short,i like like python',            'life is too long,i dislike python']    # 1、实例化一个转换器类    transfer = CountVectorizer(stop_words=['is', 'too'])    # 2、调用fit_transform    data_new = transfer.fit_transform(data)    print("data_new:\n", data_new.toarray())  # toarray转换为二维数组    print("特征名字:\n", transfer.get_feature_names())    return Noneif __name__ == "__main__":    count_demo()输出:data_new: [[0 1 2 0 1 1] [1 1 0 1 1 0]]特征名字: ['dislike', 'life', 'like', 'long', 'python', 'short']③中文分本分词例1:from sklearn.feature_extraction.text import CountVectorizerdef count_demo():    """    文本特征抽取:CountVectorizer    :return:    """    data = ['我 爱 北京 天安门',            '天安门 上 太阳 升']    # 1、实例化一个转换器类    transfer = CountVectorizer()    # 2、调用fit_transform    data_new = transfer.fit_transform(data)    print("data_new:\n", data_new.toarray())  # toarray转换为二维数组    print("特征名字:\n", transfer.get_feature_names())    return Noneif __name__ == "__main__":    count_demo()输出:data_new: [[1 1 0] [0 1 1]]特征名字: ['北京', '天安门', '太阳']例2:from sklearn.feature_extraction.text import CountVectorizerimport jiebadef count_chinese_demo2():    """    中文文本特征抽取,自动分词    :return:    """    data = ['一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。',            '我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。',            '如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']    data_new = []    for sent in data:        data_new.append(cut_word(sent))    print(data_new)     # 1、实例化一个转换器类    transfer = CountVectorizer()    # 2、调用fit_transform    data_final = transfer.fit_transform(data_new)    print("data_final:\n", data_final.toarray())    print("特征名字:\n", transfer.get_feature_names())    return Nonedef cut_word(text):    """    进行中文分词:“我爱北京天安门” -> "我 爱  北京 天安门"    :param text:    :return:    """    return ' '.join(jieba.cut(text)) if __name__ == "__main__":    count_chinese_demo2()    #print(cut_word('我爱北京天安门'))输出:['一种 还是 一种 今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。', '我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。', '如果 只用 一种 方式 了解 某件事 物 , 他 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。']data_final: [[2 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 1  0] [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 0  1] [1 1 0 0 4 2 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0  0]]特征名字: ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某件事', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '还是', '这样']注:关键词:在某一个类别的文章中,出现的次数很多,但是在其他类别的文章中出现很少④Tf-idf文本特征提取(这种方法是计算特征词的重要程度的)Tf-idf的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来区分Tf-idf作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度TF-IDF:衡量重要程度TF:词频IDF:逆向文档频率,可以由总文件数目 / 包含该词语之文件的数目,再将得到的商取以10为底的对数得到例:from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizerimport jiebadef cut_word(text):    """    进行中文分词:“我爱北京天安门” -> "我 爱  北京 天安门"    :param text:    :return:    """    return ' '.join(jieba.cut(text))def tfidf_demo():    """    用TF-IDF的方法进行文本特征抽取    :return:    """    data = ['一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。',            '我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。',            '如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']    data_new = []    for sent in data:        data_new.append(cut_word(sent))    print(data_new)     # 1、实例化一个转换器类    transfer = TfidfVectorizer()    # 2、调用fit_transform    data_final = transfer.fit_transform(data_new)    print("data_final:\n", data_final.toarray())    print("特征名字:\n", transfer.get_feature_names())    return Noneif __name__ == "__main__":    tfidf_demo()    #print(cut_word('我爱北京天安门')输出:['一种 还是 一种 今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。', '我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。', '如果 只用 一种 方式 了解 某件事 物 , 他 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。']data_final: [[0.30847454 0.         0.20280347 0.         0.         0.  0.40560694 0.         0.         0.         0.         0.  0.20280347 0.         0.20280347 0.         0.         0.  0.         0.20280347 0.20280347 0.         0.40560694 0.  0.20280347 0.         0.40560694 0.20280347 0.         0.  0.         0.20280347 0.20280347 0.         0.         0.20280347  0.        ] [0.         0.         0.         0.2410822  0.         0.  0.         0.2410822  0.2410822  0.2410822  0.         0.  0.         0.         0.         0.         0.         0.2410822  0.55004769 0.         0.         0.         0.         0.2410822  0.         0.         0.         0.         0.48216441 0.  0.         0.         0.         0.         0.2410822  0.  0.2410822 ] [0.12826533 0.16865349 0.         0.         0.67461397 0.33730698  0.         0.         0.         0.         0.16865349 0.16865349  0.         0.16865349 0.         0.16865349 0.16865349 0.  0.12826533 0.         0.         0.16865349 0.         0.  0.         0.16865349 0.         0.         0.         0.33730698  0.16865349 0.         0.         0.16865349 0.         0.  0.        ]]特征名字: ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某件事', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '还是', '这样'] 特征预处理 (1)归一化:Sklearn.preprocessing.MinMaxScaler(feature_range(0,1)…)MinMaxScaler.fit_transform(X),X:numpy array格式的数据[n_samples,n_features],返回值:转换后的形式相同的array例:import pandas as pdfrom sklearn.preprocessing import MinMaxScalerdef minmax_demo():    """    归一化    :return:    """    # 1、获取数据    data = pd.read_csv("datingTestSet2.txt", sep='\t')    data = data.iloc[:, :3]    print("data:\n", data)    # 2、实例化一个转换器类    transform = MinMaxScaler()    #transform = MinMaxScaler(feature_range=[2,3])    # 3、调用fit_transform    data_new = transform.fit_transform(data)    print("data_new:\n", data_new)    return Noneif __name__ == "__main__":    minmax_demo()注:最大值与最小值非常容易受到异常值影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景 (2)标准化:(通过对原始数据进行变换把数据变换到均值为0,标准差为1的范围内)(受异常值影响较小,在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景)sklearn.perprocessing.StandradScaler()处理之后,对每列来说,所有数据都聚集在均值为0附近,标准差为1StandardScaler.fit_transform(X),X;numpy array格式的数据[n_samples,n_features],返回值:转化后的形状相同的array例子:from sklearn.preprocessing import MinMaxScaler, StandardScalerdef stand_demo():    """    标准化    :return:    """    # 1、获取数据    data = pd.read_csv("datingTestSet2.txt", sep='\t')    data = data.iloc[:, :3]    print("data:\n", data)    # 2、实例化一个转换器类    transform = StandardScaler()    #transform = StandardScaler(feature_range=[2,3])    # 3、调用fit_transform    data_new = transform.fit_transform(data)    print("data_new:\n", data_new)    return Noneif __name__ == "__main__":    stand_demo() 7.特征降维(1)降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程(2)方式:特征选择①Filter过滤式:主要探究特征本身特点、特征与特征和目标值之间关联a.方差选择法:低方差特征过滤(低方差代表那一列数据差别不大,所以不是主要特征)b. 相关系数:特征与特征之间的相关程度②Embedded嵌入式:算法自动选择特征(特征与目标值之间的关联)A.决策树:信息熵、信息增益B.正则化:L1、L2C.深度学习:卷积等 过滤式例:sklearn.feature_selection.VArianceThreshold(threshold=0.0)删除所有低方差特征Variance.fit_transform(X),X:numpy array格式的数据[m_sample,n_features],返回值:训练集差异低于threadshold的特征将被删除。默认值是保留非零方差特征,即删除所有样本中具有相同值的特征from sklearn.feature_selection import VarianceThresholddef variance_demo():    """    低方差特征过滤    :return:    """    # 1、获取数据    data = pd.read_csv('factor_returns.csv')    print('data:\n', data)    data = data.iloc[:,1:-2]    print('data:\n', data)    # 2、实例化一个转换器类    #transform = VarianceThreshold()    transform = VarianceThreshold(threshold=10)    # 3、调用fit_transform    data_new = transform.fit_transform(data)    print("data_new\n", data_new, data_new.shape)    return Noneif __name__ == "__main__":    variance_demo() 相关系数:(输出的结果相关系数看前面那个)from sklearn.feature_selection import VarianceThresholdfrom scipy.stats import pearsonrdef variance_demo():    """    低方差特征过滤    :return:    """    # 1、获取数据    data = pd.read_csv('factor_returns.csv')    print('data:\n', data)    data = data.iloc[:,1:-2]    print('data:\n', data)    # 2、实例化一个转换器类    #transform = VarianceThreshold()    transform = VarianceThreshold(threshold=10)    # 3、调用fit_transform    data_new = transform.fit_transform(data)    print("data_new\n", data_new, data_new.shape)    # 计算两个变量之间的相关系数    r = pearsonr(data["pe_ratio"],data["pb_ratio"])    print("相关系数:\n", r)    return Noneif __name__ == "__main__":    variance_demo() 注:如果特征与特征相关性很高:选取其中一个加权求和主成分分析 主成分分析(高维数据转换为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量)sklearn.decomposition.PCA(n_components=None)将数据分解为较低维度空间n_components:小数:表示保留百分之多少的信息整数:减少到多少特征PCA.fit_transform(X),X:numpy array格式的数据[N_samples, n_features],返回值:转换后指定维度的array例:from sklearn.decomposition import PCAdef pca_demo():    """    PCA降维    :return:    """    data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]    # 1、实例化一个转换器类    transform = PCA(n_components=2)  # 4个特征降到2个特征    # 2、调用fit_transform    data_new = transform.fit_transform(data)    print("data_new\n", data_new)    transform2 = PCA(n_components=0.95)  # 保留95%的信息    data_new2 = transform2.fit_transform(data)    print("data_new2\n", data_new2)    return Noneif __name__ == "__main__":    pca_demo()  案例:探究用户对物品类别的喜好细分降维1.获取数据(pd.read_csv())2.合并表(pd.merge(表1,表2,on=['要连接的列','要连接的列']))3.找表之间的关系(交叉表)(pd.crosstab(表['列'1],表['列2']))4.PCA降维(引入,实例化,调用fit_transform) 8.sklearn转换器和估计器     8.1.1 转换器      (1)实例化一个转换器类      (2)调用fit_transform()注:fit_transfrom为fit和transfrom的合成方法Fit  计算 即计算每一列的均值和标准差Transform  转换   8.1.2 估计器(estimator)(1)用于分类的估计器:      sklearn.neighbors    K近邻算法       sklearn.native_bayes    贝叶斯       sklearn.linear_model.LogisticRegression  逻辑回归       sklearn.tree  决策树与随机森林(2) 用于回归的估计器      sklearn.linear_model.LinearRegression 线性回归      sklearn.linear_model.Ridge  岭回归(3) 用于无监督学习的估计器      sklearn.cluster.Kmeans 聚类步骤:1.实例化一个estimator           2.estimator.fit(x_train,y_train)计算---------调用完毕,模型生成           3.模型评估          1) 直接比对真实值和预测值:y_predict =estimator.predict(x_test)           2) 计算准确率: accuracy = estimator.score(x_test,y_test) 8.2.1 KNN算法APIsklearn.neighbor.KNeighborsClassifier(n_neighbors=5, algorithm='auto')n_neighbors:int型,k_neighbors查询默认使用的邻居数algorithm:{‘auto’,‘ball_tree’,‘kd_tree’}之一 案例:鸢尾花种类预测步骤:1.获取数据           2.数据集划分           3.特征工程:标准化           4.KNN预估器流程           5.模型评估from sklearn.datasets import load_iris                  # 获取数据集from sklearn.model_selection import train_test_split    # 划分数据集from sklearn.preprocessing import StandardScaler        # 标准化from sklearn.neighbors import KNeighborsClassifier      # KNN算法分类 def knn_iris():    """    用KNN算法对鸢尾花进行分类    :return:    """    # 1、获取数据    iris = load_iris()     # 2、划分数据集    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)     # 3、特征工程:标准化    transfer = StandardScaler()    x_train = transfer.fit_transform(x_train)  # 训练集标准化    x_test = transfer.transform(x_test)        # 测试集标准化 注: x_test直接用transform,因为要对训练集和测试集做相同的处理,此处不需再计算,而直接使用训练集的测试结果     # 4、KNN算法预估器    estimator = KNeighborsClassifier(n_neighbors=3)    estimator.fit(x_train, y_train)     # 5、模型评估    # 方法1:直接比对真实值和预测值    y_predict = estimator.predict(x_test)    print("y_predict:\n", y_predict)    print("直接比对真实值和预测值:\n", y_test == y_predict)  # 直接比对     # 方法2:计算准确率    score = estimator.score(x_test, y_test)  # 测试集的特征值,测试集的目标值    print("准确率:\n", score)    return Noneif __name__ == "__main__":    knn_iris()  9.模型选择与调优   (1)交叉验证(cross validation)  (2)超参数搜索-----网格搜索(GridSearch)  9.1.1  模型选择与调优APIsklearn.model_selection.GridSearchCV(estimator, param_grid=None, cv=None)对估计器的指定参数进行详尽搜索estimator:估计器对象param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}    注意是字典格式cv:指定几折交叉验证fit():输入训练数据score():准确率结果分析:最佳参数:best_params_最佳结果:best_score_最佳估计器:best_estimator_交叉验证结果:cv_results_ 鸢尾花案例增加K值调优(要在评估器后面加入调优)from sklearn.datasets import load_iris                  # 获取数据集from sklearn.model_selection import train_test_split    # 划分数据集from sklearn.preprocessing import StandardScaler        # 标准化from sklearn.neighbors import KNeighborsClassifier      # KNN算法分类from sklearn.model_selection import GridSearchCVdef knn_iris_gscv():    """    用KNN算法对鸢尾花进行分类    添加网格搜索和交叉验证    :return:    """    # 1、获取数据    iris = load_iris()     # 2、划分数据集    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)     # 3、特征工程:标准化    transfer = StandardScaler()    x_train = transfer.fit_transform(x_train)  # 训练集标准化    x_test = transfer.transform(x_test)        # 测试集标准化     # 4、KNN算法预估器    estimator = KNeighborsClassifier()    # 加入网格搜索与交叉验证    # 参数准备    param_dict = {"n_neighbors": [1,3,5,7,9,11]}    estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)  # 10折,数据量不大,可以多折     estimator.fit(x_train, y_train)     # 5、模型评估    # 方法1:直接比对真实值和预测值    y_predict = estimator.predict(x_test)    print("y_predict:\n", y_predict)    print("直接必读真实值和预测值:\n", y_test == y_predict)  # 直接比对     # 方法2:计算准确率    score = estimator.score(x_test, y_test)  # 测试集的特征值,测试集的目标值    print("准确率:", score)     # 查看最佳参数:best_params_    print("最佳参数:", estimator.best_params_)    # 最佳结果:best_score_    print("最佳结果:", estimator.best_score_)    # 最佳估计器:best_estimator_    print("最佳估计器:", estimator.best_estimator_)    # 交叉验证结果:cv_results_    print("交叉验证结果:", estimator.cv_results_)    return Noneif __name__ == "__main__":    knn_iris_gscv() 10.集成学习方法之随机森林  集成学习方法通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各种独立地学习和做出预测。这些预测最后结合成组合预测,因此优于任何一个单分类做出的预测 10.1.1  什么是随机森林   在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别数输出的类别的众数而定例:如果训练了5棵树,5棵树的结果是True,1棵树的结果是False,那么最终结果就是True 10.1.2  随机森林原理过程  两个随机:        训练集随机: BoostStrap,N个样本中随机有放回抽样         特征值随机:从M个特征中随机抽取m个特征,M>>m  问题:为什么要采用BootStrap抽样 1. 为什么要随机抽样训练集?   如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的为什么要有放回地抽样?   如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每颗树都是“有偏的”,都是绝对“片面的”,也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树的投票表决 10.1.3 随机森林分类器APIsklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, /bootstrap=True, random_state=None, min_samples_split=2)n_estimators:integer,optional(default=10)森林里的树木数量,可以用网格搜索criteria:string,可选(default=‘gini’),分割特征的测量方法max_depth:integer或None,可选(默认无),树的最大深度5,8,15,25,30 可以用网格搜索max_teatures=‘auto’,每个决策树的最大特征数量if ‘auto’ ,then max_features = sqrt(n_features)if ‘sqrt’ ,then max_features = sqrt(n_features)if ‘log2’ ,then max_features = log2(n_features)if None,then max_features = n_featuresbooststrap:boolean,optional(default=True)是否在构建树时使用放回抽样min_samples_split:节点划分最少样本数min_samples_leaf:叶子节点的最小样本数超参数:n_estimator,max_depth,min_samples_split,min_samples_leaf10.1.4 随机森林案例预测:from sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import GridSearchCVestimator = RandomForestClassifier()# 加入网格搜索与交叉验证# 参数准备param_dict = {"n_estimators":[120,200,300,500,800,1200], "max_depth":[5,8,15,25,30]}estimator = GridSearchCV(estimator, param_grid=param_dict, cv=3)  # 10折,数据量不大,可以多折estimator.fit(x_train, y_train) # 5、模型评估# 方法1:直接比对真实值和预测值y_predict = estimator.predict(x_test)print("y_predict:\n", y_predict)print("直接必读真实值和预测值:\n", y_test == y_predict)  # 直接比对 # 方法2:计算准确率score = estimator.score(x_test, y_test)  # 测试集的特征值,测试集的目标值print("准确率:", score)# 查看最佳参数:best_params_print("最佳参数:", estimator.best_params_)# 最佳结果:best_score_print("最佳结果:", estimator.best_score_)# 最佳估计器:best_estimator_print("最佳估计器:", estimator.best_estimator_)# 交叉验证结果:cv_results_print("交叉验证结果:", estimator.cv_results_) 10.1.5 随机森林算法总结  (1)在当前所有算法中,具有极好的准确率  (2)能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维  (3)能够评估各个特征在分类问题上的重要性 线性回归:1)线性回归是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式特点: 只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归 2)损失函数:最小二乘法 (均方误差)3)优化算法:① 正规方程:直接求解W                       ② 梯度下降:试错,改进4)线性回归API:sklearn.linear_model.LinearRegression(fit_intercept=True)fit_intercept:是否计算偏置LinearRegression.coef_:回归系数LinearRegression.intercept_:偏置5)梯度下降API:sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate='invscaling', eta0=0.01)SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型loss:损失类型loss=“squared_loss”:普通最小二乘法fit_intercept:是否计算偏置learning_rate:string,optional学习率填充‘constant’:eta=eta0‘optimal’:eta=1.0 / (alpha*(t+t0)) [default]‘invscaling’:eta=eta0 / pow(t, power_t)SGDRegression.coef_:回归系数SGDRegression.intercept_:偏置 波士顿房价预测例:1)流程:获取数据集划分数据集特征工程:无量纲化-标准化预估器流程:fit() -> 模型,coef_  intercept_模型评估2)回归性能评估 ----均方误差(MSE)sklearn.metrics.mean_squared_error(y_ture, y_pred)均方误差回归损失y_true:真实值y_pred:预测值return:浮点数结果3)代码from sklearn.datasets import load_bostonfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LinearRegression, SGDRegressorfrom sklearn.metrics import mean_squared_errordef linner1():    """    正规方程的优化方法    :return:    """    # 1)获取数据    boston = load_boston()     # 2)划分数据集    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)     # 3)标准化    transfer = StandardScaler()    x_train = transfer.fit_transform(x_train)    x_test = transfer.transform(x_test)     # 4)预估器    estimator = LinearRegression()    estimator.fit(x_train, y_train)     # 5)得出模型    print("正规方程权重系数为:\n", estimator.coef_)    print("正规方程偏置为:\n", estimator.intercept_)     # 6)模型评估    y_predict = estimator.predict(x_test)    print("预测房价:\n", y_predict)    error = mean_squared_error(y_test, y_predict)    print("正规方程-均分误差为:\n", error)     return None def linner2():    """    梯度下降的优化方法    :return:    """    # 1)获取数据    boston = load_boston()    print("特征数量:\n", boston.data.shape)  # 几个特征对应几个权重系数     # 2)划分数据集    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)     # 3)标准化    transfer = StandardScaler()    x_train = transfer.fit_transform(x_train)    x_test = transfer.transform(x_test)     # 4)预估器    estimator = SGDRegressor(learning_rate="constant", eta0=0.001, max_iter=10000)    estimator.fit(x_train, y_train)     # 5)得出模型    print("梯度下降权重系数为:\n", estimator.coef_)    print("梯度下降偏置为:\n", estimator.intercept_)     # 6)模型评估    y_predict = estimator.predict(x_test)    print("预测房价:\n", y_predict)    error = mean_squared_error(y_test, y_predict)    print("梯度下降-均分误差为:\n", error)    return Noneif __name__ == '__main__':    linner1()    linner2() 4)对比:梯度下降正规方程需要选择学习率不需要需要迭代求解一次运算得出特征数量较大可以使用需要计算方程,时间复杂度O(n3) 5)梯度下降的扩展:GD、SGD、SAG   ① GD:  梯度下降,原始的梯度下降法需要计算所有样本的值才能够得出梯度,计算量大,所以后面才会有一系列改进   ② SGD:  随机梯度下降是一个优化方法。它在一次迭代时只考虑一个训练样本  优点: 高效、容易实现  缺点:需要许多超参数:比如正则项参数、迭代数            对于特征标准化是敏感的 ③ SAG  随机平均梯度法,由于收敛的速度太慢,有人提出SAG等基于梯度下降的算法 Scikit-learn:岭回归、逻辑回归等当中都会有SAG优化 欠拟合过拟合1)欠拟合:在训练集和测试集表现都不好原因:学习到数据的特征过少解决办法:增加数据的特征数量2)过拟合:在训练集表现好,但在测试集表现不好原因:学习到的特征过多,存在一些嘈杂特征,模型过于复杂解决办法:正则化 正则化:1)L1正则化:使其中一些W(权重)的值直接为0,删除这个特征的影响采用L1正则化的线性回归模型是LASSO回归2)L2正则化:使其中一些W(权重)的值都很小,都接近于0,削弱某个特征的影响采用L2正则化的线性回归模型是Ridge回归加入L2正则化后的损失函数:损失函数+惩罚项优点:越小的参数说明模型越简单,越简单的模型也不容易产生过拟合现象 线性回归的改进---岭回归1).带有L2正则化的线性回归----岭回归2).APIsklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, solver='auto', normalize=False)alpha:正则化力度,取值范围:0-1,1-10solver:会根据数据自动选择优化方法sag:如果数据集、特征都较大,选择该随机梯度下降优化normalize:数据是否进行标准化normalize=False:可以在fit之前调用preprocessing.StandardScaler标准化数据Ridge.coef_:回归权重Ridge.intercept_:回归偏置3)例:from sklearn.datasets import load_bostonfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LinearRegression, SGDRegressor, Ridgefrom sklearn.metrics import mean_squared_errordef linner1():    """    正规方程的优化方法    :return:    """    # 1)获取数据    boston = load_boston()    # 2)划分数据集    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)    # 3)标准化    transfer = StandardScaler()    x_train = transfer.fit_transform(x_train)    x_test = transfer.transform(x_test)    # 4)预估器    estimator = LinearRegression()    estimator.fit(x_train, y_train)    # 5)得出模型    print("正规方程权重系数为:\n", estimator.coef_)    print("正规方程偏置为:\n", estimator.intercept_)    # 6)模型评估    y_predict = estimator.predict(x_test)    print("预测房价:\n", y_predict)    error = mean_squared_error(y_test, y_predict)    print("正规方程-均分误差为:\n", error)    return None def linner2():    """    梯度下降的优化方法    :return:    """    # 1)获取数据    boston = load_boston()    print("特征数量:\n", boston.data.shape)  # 几个特征对应几个权重系数    # 2)划分数据集    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)    # 3)标准化    transfer = StandardScaler()    x_train = transfer.fit_transform(x_train)    x_test = transfer.transform(x_test)    # 4)预估器    estimator = SGDRegressor(learning_rate="constant", eta0=0.001, max_iter=10000)    estimator.fit(x_train, y_train)    # 5)得出模型    print("梯度下降权重系数为:\n", estimator.coef_)    print("梯度下降偏置为:\n", estimator.intercept_)    # 6)模型评估    y_predict = estimator.predict(x_test)    print("预测房价:\n", y_predict)    error = mean_squared_error(y_test, y_predict)    print("梯度下降-均分误差为:\n", error)    return None def linner3():    """    岭回归    :return:    """    # 1)获取数据    boston = load_boston()    print("特征数量:\n", boston.data.shape)  # 几个特征对应几个权重系数    # 2)划分数据集    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)    # 3)标准化    transfer = StandardScaler()    x_train = transfer.fit_transform(x_train)    x_test = transfer.transform(x_test)    # 4)预估器    estimator = Ridge(alpha=0.5, max_iter=10000)  # 可默认参数    estimator.fit(x_train, y_train)    # 5)得出模型    print("岭回归-权重系数为:\n", estimator.coef_)    print("岭回归-下降偏置为:\n", estimator.intercept_)    # 6)模型评估    y_predict = estimator.predict(x_test)    print("预测房价:\n", y_predict)    error = mean_squared_error(y_test, y_predict)    print("岭回归-均分误差为:\n", error)    return Noneif __name__ == '__main__':    linner1()    linner2()    linner3() 逻辑回归:(解决二分类)1).线性回归的输出就是逻辑回归的输入,将输出输入到sigmoid函数中,就将输出结果映射到[0,1]中,设置阈值,就能解决二分类问题2).APIsklearn.linear_model.LogisticRefression(solver='liblinear', penalty='l2, C=1.0)penalty:正则化种类C:正则化力度solver:优化求解方式(默认开源的liblinear库实现)3).例:癌症分类预测-良/恶性乳腺癌肿瘤预测流程分析获取数据数据处理:处理缺失值数据集划分特征工程:无量纲化处理——标准化逻辑回归预估器模型评估import pandas as pdimport numpy as np# 1、读取数据path = "cid:link_0"column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',                   'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',                   'Normal Nucleoli', 'Mitoses', 'Class']data = pd.read_csv(path, names=column_name)  #699 rows × 11 columns# 2、缺失值处理# 1)替换-》np.nandata = data.replace(to_replace="?", value=np.nan)# 2)删除缺失样本data.dropna(inplace=True)  #683 rows × 11 columns# 3、划分数据集from sklearn.model_selection import train_test_split# 筛选特征值和目标值x = data.iloc[:, 1:-1]y = data["Class"]x_train, x_test, y_train, y_test = train_test_split(x, y)# 4、标准化from sklearn.preprocessing import StandardScalertransfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)from sklearn.linear_model import LogisticRegression# 5、预估器流程estimator = LogisticRegression()estimator.fit(x_train, y_train)# 逻辑回归的模型参数:回归系数和偏置estimator.coef_   # 权重estimator.intercept_  # 偏置# 6、模型评估# 方法1:直接比对真实值和预测值y_predict = estimator.predict(x_test)print("y_predict:\n", y_predict)print("直接比对真实值和预测值:\n", y_test == y_predict) # 方法2:计算准确率score = estimator.score(x_test, y_test)print("准确率为:\n", score) 分类评估方法:1)精确率与召回率精确率:预测结果为正例样本中真实为正例的比例召回率:真实为正例的样本中预测结果为正例的比例F1-score:反映了模型的稳健性2)API:sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None)y_true:真实目标值y_pred:估计器预测目标值labels:指定类别对应的数字target_names:目标类别名称return:每个类别精确率与召回率# 查看精确率、召回率、F1-scorefrom sklearn.metrics import classification_reportreport = classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"]) 3)衡量样本不均衡下的评估ROC曲线与AUC指标TPR就是召回率  4)AUC计算APIfrom sklearn.metrics import roc_auc_scoreroc_auc_score(y_true, y_score)y_true:每个样本的真实类别,必须为0(反例)和1(正例)y_score:预测得分,可以是正类的估计概率、置信值或者分类器方法的返回值# y_true:每个样本的真实类别,必须为0(反例),1(正例)标记# 将y_test 转换成 0 1y_true = np.where(y_test > 3, 1, 0) from sklearn.metrics import roc_auc_scoreroc_auc_score(y_true, y_predict) 5)总结:AUC只能用来评价二分类AUC非常适合评价样本在不平衡中的分类器性能 6)模型保存和加载APIimport joblib保存:joblib.dump(rf, ‘test.pkl’)加载:estimator = joblib.load(‘test.pkl’)  无监督学习:聚类:K-means降维:PCA 1)K-means APIsklearn.cluster.KMeans(n_cluster=8, init='k-means++')n_clusters:开始聚类中心数量init:初始化方法,默认为‘k-means++’labels_:默认标记的类型,可以和真实值比较(不是值比较)from sklearn.cluster import KMeansestimator = KMeans(n_clusters=3)estimator.fit(data_new)y_predict = estimator.predict(data_new)2)K-means性能评估指标①轮廓系数②轮廓系数值分析③结论如果bi>>ai:趋近于1效果越好,bi<<ai:趋近于-1,效果不好。轮廓系数的值是介于[-1,1],越趋近于1代表内聚度和分离度都相对较优 ④轮廓系数APIsklearn.metrics.silhouette_score(X, labels)计算所有样本的平均轮廓系数X:特征值labels:被聚类标记的目标值from  sklearn.metrics import silhouette_scoresilhouette_score(data_new, y_predict) ⑤K-means总结:特点分析:采用迭代式算法,直观易懂并且非常实用缺点:容易收敛到局部最优解(多次聚类)注:聚类一般在分类之前
  • [技术干货] 1111
    Dataframe 属性dataframe函数import numpy as npimport pandas as pd # python list创建series# countries = ['USA','uk','china','france']# my_data = [100,200,300,400]# data = pd.Series(countries,my_data)# print(data) # numpy ndarray创建Series# array = np.array(my_data)# data1 = pd.Series(array)# print(data1) # python dict创建series# my_dict = {'usa':100,'china':200,'uk':300,'france':400}# data2 = pd.Series(my_dict)# print(data2) # 标量创建series# data3 = pd.Series(5,index = [1,2,3,4])# print(data3) # 从series获取数据# data4 = pd.Series([1,2,3,4],['usa','china','uk','france'])# print(data4['usa']) # series算数运算操作# series1 = pd.Series([1,2,3,4],['usa','china','uk','france'])# series2 = pd.Series([1,2,4,3],['usa','china','uk','canada'])# print(series1 - series2)# print(series1 * series2) # series创建dataframe# df = {'name': pd.Series([1,2,3,4],index = ['usa','china','uk','france']),#       'age': pd.Series([20,30,40,50],['usa','china','uk','france']),#       'data': pd.Series([4,3,2],['usa','china','uk'])}# df1 = pd.DataFrame(df)# print(df1) # 字典创建dataframe# data = {'name': ['zhangsan','lisi','wangwu'],#         'age': [10,20,30],#         'grade' : [1,2,3]}# print(data)# df2 = pd.DataFrame(data)# print(df2) # 获取、设置和删除列# print(type(df2['name']))# print(type(df2[['name','age']]))# df1['grade'] = pd.Series([6,7,8,9],['usa','china','uk','france'])# print(df1)# 删除 drop,axis=0对应行row,axis=1对应列column# df1.drop(['grade'],axis=1,inplace=True)# df1.drop(['usa'],axis=0,inplace=True)# print(df1)# loc按索引引用,iloc按这行在表中的位置引用# print(df1.loc['uk'])# print(df1.iloc[[0,1]])# print(df1.loc['uk','name'])# print(df1.loc[['uk','china'],['name','age']]) # 条件筛选# df = pd.DataFrame(np.random.rand(5,4),['a','b','c','d','e'],['h','i','j','k'])# print(df['h']>0.5)# print(df[df['h']>0.5][['i','h']])# print(df[(df['h']>0.5) | (df['i']<0.8)])# df1 = df.reset_index()# print(df1)# df['ID'] = [1,2,3,4,5]# df2 = df.set_index('ID')# print(df2) # 缺失值处理# 删除# dt = {'A':[1,np.nan,3],'B':[2,np.nan,np.nan],'C':[4,5,6]}# dt = pd.DataFrame(dt)# print(dt)# dt1 = dt.dropna(axis=1)# print(dt1)# dt.dropna(axis=0,inplace=True)# print(dt)# 填充# dt.fillna('10',inplace=True)# print(dt) # 分组统计# data = {'name': ['zhangsan','lisi','wangwu','liliu'],#         'age': [10,20,30,20],#          'grade' : [1,2,3,4]}# data = pd.DataFrame(data)# data1 = data.groupby('age').describe().transpose()# print(data1) # 堆叠 (concat)# df1 = pd.DataFrame(np.random.rand(3,2),['a','b','c'])# df2 = pd.DataFrame(np.random.rand(3,2),['d','e','f'])# df3 = pd.DataFrame(np.random.rand(3,2),['o','p','q'])# df = pd.concat([df1,df2,df3],axis=1)# print(df) # 归并 (merge)# left = pd.DataFrame({'key':['k0','k1','k2','k3']#                      ,'A':[1,2,3,4]#                      ,'B':[1,2,3,4]})# right = pd.DataFrame({'key':['k0','k1','k2','k3']#                      ,'c':[1,2,3,4]#                      ,'d':[1,2,3,4]})# dt1 = pd.merge(left,right,on='key')# print(dt1)# left1 = pd.DataFrame({'key1':['k0','k0','k1','k2']#                      ,'key2':['k0','k1','k0','k1']#                      ,'A':[1,2,3,4]#                      ,'B':[1,2,3,4]})# right2 = pd.DataFrame({'key1':['k0','k1','k1','k2'],#                       'key2':['k0','k0','k0','k0']#                      ,'c':[1,2,3,4]#                      ,'d':[1,2,3,4]})# dt2 = pd.merge(left1,right2,on=['key1','key2'])# print(dt2) # 连接 针对两个表之间没有太多共同的列 选择.join方法,连接采用索引作为公共的键,而不是某一列# left = pd.DataFrame({'A':[1,2,3],#                     'B':[3,4,5]},index=['k0','k1','k2'])# right = pd.DataFrame({'C':[1,2,3,4]#                     ,'D':[3,4,5,6]},index=['k0','k1','k2','k3'])# print(left.join(right,how='outer')) # 查找不重复的值df = pd.DataFrame({'col1':[1,2,3,4],'col2':[444,555,666,444],'col3':['abc','def','hig','xyz']})# print(df.info())# print(df.head()) # unique() 查找列中所有不重复的值# print(df['col2'].unique())# nunique() 查找所有不重复值的个数# print(df['col2'].nunique())# value.counts() 查找所有值和对应值的计数# print(df['col2'].value_counts()) # apply()自定义函数# print(df['col2'].apply(float)) # 获取dataframe的属性 包括列和索引的名字等等print(df.columns)print(df.index)print(df.dtypes) # 排序 sort()  sort_values()将整个表按某一列的值进行排序# print(df.sort_values()) # 查找空值 isnull()# print(df.isnull()) # 读取文件  支持csv、excel、html等# df = pd.read_csv('C://Users//Lenovo//Desktop//test.csv')# print(df)# # 写入csv文件   index = false代表不希望把索引列也存入文件中# df.to_csv('new1',index=False) # 时间序列 pandas.date_range(start=None, end=None, periods=None, freq=‘D’, tz=None, normalize=False, name=None,closed=None, **kwargs)# 返回固定频率DatetimeIndex,以日作为默认频率# 使用默认的每日频率指定开始和结束# test1 = pd.date_range(start='1/1/2024',end='1/4/2024')# print(test1)# 指定开始和期间,期间数(天)# test2 = pd.date_range(start='1/1/2024',periods=3)# print(test2)# 指定开始,结束和期间;频率自动生成(线性间隔)# test3 = pd.date_range(start='1/1/2024',end = '1/6/2024',periods=3)# print(test3)# 将频率改为'M'(月末频率)# test4 = pd.date_range(start='1/1/2024',periods=3,freq='M')# print(test4) # 通过时间序列绘图# ts=pd.Series(np.random.randn(1000),index=pd.date_range("20170301",periods=1000))# print(ts)# ts=ts.cumsum()     #cumsum 返回DataFrame或Series轴上的累积和。# print(ts)# from pylab import *    #需要导入绘图模块# ts.plot()      #绘图# show()      #展示 
  • [技术干货] Sora文生视频:重新定义视频创作的边界
    前言随着数字技术的飞速进步,视频创作已经从专业领域的专属工具,逐渐转变为大众皆可参与的创意表达平台。而在这个变革的浪潮中,Sora文生视频凭借其独特的技术优势和创新的理念,正重新定义着视频创作的边界。Sora文生视频不仅仅是一个视频编辑工具,它更是一个集创意、协作与分享于一体的综合性平台。通过Sora,用户可以轻松地将自己的想法和故事转化为生动的视频作品,与全世界分享自己的创意和热情。一、技术驱动的创意表达Sora文生视频拥有强大的技术支撑,其基于深度学习的图像处理和语音识别技术,使得视频编辑变得更加智能化和高效。用户无需具备专业的视频制作技能,只需要通过简单的拖拽和选择,就能实现复杂的视频剪辑和特效制作。在Sora平台上,用户可以轻松调整视频的色彩、光线和构图,实现电影级的视觉效果。同时,平台还提供了丰富的音效库和背景音乐选择,让视频作品更加生动和感人。除了基础的编辑功能,Sora还支持AI驱动的自动化编辑。通过智能识别视频内容,Sora能够自动添加合适的特效、转场和字幕,大大提升了视频制作的效率和便捷性。二、协作与分享的社区精神Sora文生视频非常注重用户之间的协作与分享。平台提供了多人在线编辑功能,使得团队成员可以实时协作,共同完成一个视频项目。这种协作模式不仅提高了工作效率,也让创意的碰撞和融合成为可能。同时,Sora还建立了一个充满活力的创作者社区。在这个社区里,用户可以浏览和分享其他创作者的作品,互相学习、互相启发。这种分享和互动的精神,让Sora成为了一个创意的聚集地,吸引着越来越多的创作者加入其中。三、教育与培训的广阔应用除了个人创作者和团队协作,Sora文生视频在教育和培训领域也有着广泛的应用。教师可以利用Sora平台制作生动有趣的课件和教学视频,提高学生的学习兴趣和效果。学生也可以利用Sora平台自主创作学习视频,巩固和拓展学科知识。此外,Sora还可以作为企业和机构的内部培训工具。通过制作定制化的培训视频,企业可以更加高效地进行员工培训和能力提升。四、展望未来随着技术的不断发展和市场的不断拓展,Sora文生视频的未来充满了无限可能。首先,随着5G、云计算等技术的普及,视频创作和分享将变得更加便捷和高效。Sora平台将能够支持更高清、更流畅的视频制作和分享,为用户提供更加优质的视频体验。其次,随着AI技术的不断进步,Sora的自动化编辑功能将更加智能和精准。未来,我们甚至可以期待通过语音或文字描述,就能自动生成高质量的视频作品。最后,随着全球创作者社区的不断扩大和成熟,Sora将成为一个真正的全球创意交流平台。在这个平台上,不同文化、不同背景的创作者可以相互碰撞、相互学习,共同推动视频创作艺术的进步和发展。结语Sora文生视频以其独特的技术优势和创新的理念,正在重新定义视频创作的边界。它不仅提供了一个高效便捷的视频编辑工具,更建立了一个充满活力和创意的社区。在这个平台上,每个人都可以成为创作者,用视频表达自己的想法和故事。随着技术的不断进步和市场的不断拓展,我相信Sora文生视频将会在未来继续引领视频创作的新潮流,为我们带来更多惊喜和感动。
  • [热门活动] 2023年DTT直播对我的影响
    2023年DTT直播对我产生了积极的深远影响,给我带来了丰富的收获与帮助,对我个人的成长和职业发展都有着重要的意义。1. 专业知识和技能的提升:DTT直播为我提供了学习和提升专业知识和技能的机会。通过聆听讲座、参与互动环节和案例分析,我受益匪浅,对设计思维、团队协作、产品设计等领域有了更深入的理解和实践经验。这些知识和技能的提升,让我在工作中更加自信和高效,也为我未来的职业发展奠定了坚实的基础。2. 视野和格局的拓宽:DTT直播让我接触到了来自不同行业和领域的专家、学者和企业家,他们的分享和观点让我开阔了眼界,拓宽了视野。通过与不同背景的人交流探讨,我了解到了不同的文化、不同的思维模式和不同的工作方式,这让我更加包容和理解,也为我未来的工作和生活带来了新的启发和动机。3. 人脉和资源的获取:DTT直播是一个重要的社交和网络建立平台,让我有机会与志同道合的人建立联系,这对我的人脉和资源的获取有很大帮助。在DTT直播中,我遇到了一些优秀的专业人士,他们分享了宝贵的经验和洞察,也为我提供了潜在的合作机会。这些连接和资源,不仅拓展了我的工作和生活圈子,也为我未来的发展提供了可能。4. 创新和创造力的激发:DTT直播的氛围充满活力和创造力,激发了我的创新和创造性思维。通过聆听不同的演讲和参与不同的活动,我获得了许多新的想法和灵感。这些启发让我在工作中更加敢于创新和尝试,并帮助我以更开阔的视角看待世界,寻找新的机遇和挑战。5. 个人成长的鞭策:DTT直播为我提供了一个自我反省和成长的机会。通过参与DTT直播,我意识到自己的优势和不足,这让我更加注重个人发展和学习。我开始更加积极地寻找机会,提升自己各方面的能力,包括专业知识、沟通能力、领导能力等。DTT直播让我意识到,持续学习和成长对于个人成功和职业发展至关重要。总之,2023年DTT直播对我产生了积极而深远的影响,它为我带来了丰富的收获和帮助,让我在专业知识、技能、视野、人脉、创新能力和个人成长等方面都得到了显著的提升。这是一个难忘的学习和成长之旅,我非常感谢DTT直播提供的这个绝佳的机会。
  • [技术干货] 使用bert(base)对比大语言模型(ChatGLM2-6B)做文本分类心得总结
    什么是bertBidirectional Encoder Representations from Transformers (BERT) 是一种基于变压器的机器学习技术,用于自然语言处理 (NLP) 预训练,由 Google 开发。 BERT 由 Jacob Devlin 和他的 Google 同事于 2018 年创建并发布。 2019 年,谷歌宣布已开始在其搜索引擎中使用 BERT,到 2020 年底,它几乎在所有英语查询中都使用了 BERT。 2020 年的一项文献调查得出结论,在一年多的时间里,BERT 已成为 NLP 实验中无处不在的基线,超过 150 篇研究出版物分析和改进了该模型。BERT 有两种模型:BERTBASE:12 个编码器和 12 个双向自注意头BERTLARGE:24 个编码器和 16 个双向自注意头。 两种模型都是根据从 BooksCorpus 中提取的 8 亿单词和英语维基百科中的 25 亿单词的未标记数据进行预训练的。bert与大模型(chatGPT)的区别Google 的 BERT(Bidirectional Encoder Representations from Transformers)和 ChatGPT(GPT-3.5)都是人工智能模型,但它们的应用场景和任务不同。BERT 是一种预训练语言模型,旨在为自然语言处理任务提供高质量的特征表示。它通过双向 Transformer 网络结构学习自然语言的上下文信息,从而在各种自然语言理解任务中表现出色,如文本分类、命名实体识别、情感分析等。BERT 模型的预训练数据来自于互联网上的大量文本语料库,例如维基百科和新闻文章等。而 ChatGPT 则是一种大型语言模型,旨在生成自然语言文本。它使用了单向的 Transformer 网络结构,并通过海量文本数据进行训练,从而学会生成人类类似的文本响应。ChatGPT 的应用场景主要是在线聊天机器人、自然语言生成、文本摘要等。虽然 BERT 和 ChatGPT 都是基于 Transformers 模型开发的,但它们的应用领域和任务不同,因此它们的结构和预训练数据也不同。在实际应用中,研究人员可以根据具体任务需求选择合适的模型进行微调和优化。bert与大模型(ChatGLM2-6B)在中文训练规模上的区别BERT 和 ChatGLM2-6B 都是基于 Transformers 模型的人工智能助手,但它们的训练规模和能力有所不同。以下是 BERT 和 ChatGLM2-6B 训练规模之间的对比:模型结构: BERT 是一种双向 Transformer 模型,采用双向编码器来学习文本数据中的上下文信息。它的预训练目标是最大化预测下一句的正确概率。BERT 模型有多种版本,如 BERT-base(1.1 亿参数)、BERT-large(3.4 亿参数)和 BERT-xl(11 亿参数)。 ChatGLM2-6B 是一种基于 BERT 模型的改进版,采用了单向 Transformer 网络结构。它的预训练目标是生成自然语言文本。ChatGLM2-6B 模型的版本为 ChatGLM2-6B,参数数量为 6 亿。训练数据: BERT 和 ChatGLM2-6B 的训练数据有所不同。BERT 的预训练数据主要包括了维基百科(英语版)和新闻文章等互联网文本资源。而 ChatGLM2-6B 的训练数据主要来源于清华大学 KEG 实验室和智谱 AI 公司提供的中文语料库,包括网页、书籍、新闻、论坛、问答对话等。训练规模: 从上述模型版本中,我们可以看出 ChatGLM2-6B 模型的训练规模大于 BERT 模型。ChatGLM2-6B 模型的参数数量为 6 亿,而 BERT-xl 只有 11 亿。这意味着 ChatGLM2-6B 模型在处理自然语言任务时具有更强的表达能力。性能和应用场景: ChatGLM2-6B 模型在保留了 BERT 模型优点的基础上,针对中文问答场景进行了优化。相较于 BERT 模型,ChatGLM2-6B 模型在中文问答任务上具有更好的性能。此外,ChatGLM2-6B 模型还可以应用于其他自然语言处理任务,如文本分类、命名实体识别等。bert(base)做文本分类为啥比大模型(ChatGLM2-6B)快很多先说结论:我们的项目是对用户分类其他的评价,做一个预分类,看看具体是反馈给哪个部门。经过大量测试,我们发现bert模型,无论是训练还是生成,所耗费的时间都比chatGLM2-6B快非常多原因分析:BERT 和 ChatGLM2-6B 都是基于 Transformers 模型的人工智能助手,但它们在训练和生成速度上的差异,可能源于以下几个方面:模型结构: BERT 是一种双向 Transformer 模型,采用双向编码器来学习文本数据中的上下文信息。它的预训练目标是最大化预测下一句的正确概率。BERT 模型有多种版本,如 BERT-base(1.1 亿参数)、BERT-large(3.4 亿参数)和 BERT-xl(11 亿参数)。 ChatGLM2-6B 是一种基于 BERT 模型的改进版,采用了单向 Transformer 网络结构。它的预训练目标是生成自然语言文本。ChatGLM2-6B 模型的版本为 ChatGLM2-6B,参数数量为 6 亿。训练数据和预处理: BERT 和 ChatGLM2-6B 的训练数据有所不同。BERT 的预训练数据主要包括了维基百科(英语版)和新闻文章等互联网文本资源。而 ChatGLM2-6B 的训练数据主要来源于清华大学 KEG 实验室和智谱 AI 公司提供的中文语料库,包括网页、书籍、新闻、论坛、问答对话等。 在预处理方面,BERT 模型采用了掩码语言模型(Masked Language Model,MLM)进行预训练,而 ChatGLM2-6B 采用了下一句预测任务(Next Sentence Prediction,NSP)。MLM 预训练目标使得模型在生成文本时更关注词汇的上下文信息,而 NSP 则相对关注整句话的语义关系。这使得 BERT 在中文分类任务上表现较好。生成速度: 在生成速度方面,BERT 和 ChatGLM2-6B 的差异主要体现在生成任务的复杂性。BERT 模型在生成文本时,采用了无监督的 MLM 预训练目标,使得模型能够在没有明确任务指导的情况下生成连贯、自然的文本。而 ChatGLM2-6B 模型在生成任务上采用了有监督的 NSP 任务,其生成速度相对较慢,因为模型需要在给定上下文中预测下一个句子。综上所述,BERT 在中文分类任务上相较于 ChatGLM2-6B 具有优势,主要得益于其双向 Transformer 结构、MLM 预训练目标以及模型规模。而在训练和生成速度方面,主要得益于其较小的模型规模、高效的优化算法和硬件设施,因此快很多如果想提示ChatGLM2-6B的速度,建议量化到Int4,同时减少训练的轮数(但是这会使得丢失率变大),需要权衡利弊
  • 资讯|首个卓越级评分!华为云盘古大模型完成三项标准符合性验证
    9月17日,在2023可信AI大会暨南京人工智能产业发展大会上,中国信通院发布大模型标准符合性验证结果,华为云盘古大模型凭借丰富的行业应用,完成37项能力项测试,成为业界首个在模型应用模块获得卓越级(5级)评分的大模型产品。在生成式人工智能技术能力和产品能力标准符合性验证中,获得优秀级(4+级)评分。三项验证均达到当前最高级别。中国信通院自2021年启动大规模预训练模型标准研究工作,联合技术供应方、方案集成方、应用需求方共同梳理大模型工程化重要实践阶段,形成大模型技术和应用标准体系,加速推进人工智能实用化、通用化和普惠化发展进程。华为云盘古大模型在2022年首批参与,在“模型开发”和“模型能力”两个模块中均达到优秀级(4+级)。在本次符合性验证中,华为云盘古大模型展示了四大模型应用能力和特点:涵盖20+行业场景专注于行业深度应用,提供包括银行、保险、政务、能源、工业、交通、招聘、教育、文化、医疗、办公、传媒、通信、电商、电力、气象、信息服务、数字媒体、创意设计、移动应用、数据服务等行业能力,提供全方位的大模型落地解决方案。采用分层解耦架构为行业提供5+N+X三层大模型架构,同时支持企业个性化的部署模式、计量方式和服务模型,并提供全面的数据管理、模型管理、资源管理和用户管理服务平台。完善服务配套从易用性、稳定性、适配性、可审查性、可维护性五个维度保障可靠服务,提供配套工具、插件、服务反馈、交流社区、技术支撑和人员配备。提供灵活多样的服务形式和成熟完善的服务流程。全栈技术创新基于华为软硬件全栈能力针对场景任务优化和调整大模型,在场景任务测评的性能提升度、业务优化度、响应实时性、计量准确性、无故障时间等指标上表现优异。华为云大数据与人工智能领域总经理李伟表示,盘古大模型为行业而生。以盘古金融大模型为例,它为金融行业提供了全岗位专家级助手,覆盖风控、营销、投研、动产质押、理赔、客服等领域。华为云将金融大模型的常用行业能力沉淀为五大技能:金融知识文档问答,跨模态内容理解与生成,多任务理解,代码生成/补全,智能化软件交互集成。金融机构借助这些技能可以灵活组合出多种多样的应用场景,实现“业务经验口口相授”到“业务指导秒级生成”的转变,完成从“专家用数”向“人人都是分析师”的升级。华为云与工商银行紧密合作,通过盘古打造工行的金融大模型,基于银行的各种操作、政策、案例文档进行预训练,能够根据客户的问题,为柜台工作人员,自动生成流程和操作指导,将原来平均5次操作,降低为1次,办结时间缩短了5分钟以上。此外,双方还建立联合项目组,梳理了一整套大模型企业落地方法论,让企业员工深入拥抱新技术,应用大模型解决业务痛点。同时,华为作为信通院金融大模型标准的核心参编单位,正积极参与大模型相关标准编制工作。华为云自2019年启动盘古大模型研发。截至目前,华为云盘古预训练大模型已申请60+专利,发表100+IEEE/ACM高水平学术论文,获10+项业界挑战赛冠军,业界首发千亿参数NLP(自然语言处理)大模型,视觉大模型在ImageNet-1000 数据集上精度达到业界第一,获2021世界人工智能大会SAIL之星奖、2021苏州智博会产品金奖等奖项、助力20+行业100+场景实现降本增效。 华为云联合产业伙伴成立大模型高质量数据联盟,领衔担任人工智能关键技术和应用评测工信部重点实验室大模型工作组副组长单位,担任国家人工智能标准化总体组大模型专题组联合组长单位。华为云将持续践行“深耕数字化、一切皆服务”,推动大模型研究开发、运营管理、服务应用等工程化进程,将AI技术和行业落地经验云化、服务化,让企业创新触手可及。转自华为云公众号