偏最小二乘法回归的Python代码看不懂,有大佬可以帮忙解释一下吗?

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"#basic module\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"from sklearn import preprocessing\n",
"from sklearn import metrics\n",
"from sklearn.decomposition import PCA \n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"

\n",
"\n&quot;,<br> &quot; .dataframe tbody tr th:only-of-type {\n&quot;,<br> &quot; vertical-align: middle;\n&quot;,<br> &quot; }\n&quot;,<br> &quot;\n&quot;,<br> &quot; .dataframe tbody tr th {\n&quot;,<br> &quot; vertical-align: top;\n&quot;,<br> &quot; }\n&quot;,<br> &quot;\n&quot;,<br> &quot; .dataframe thead th {\n&quot;,<br> &quot; text-align: right;\n&quot;,<br> &quot; }\n&quot;,<br> &quot;\n",
"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
"
Q41Q42Q43Q44Q45Q46Q47Q48Q49Q410Q411Q412Q413Q414A1A2A3
033333455553333-1.611.91-1.06
1444442222552221.29-2.49-0.99
244444555553333-0.041.89-1.29
344444555553333-0.041.89-1.29
444443555333443-0.230.77-0.60
\n",
"
"
],
"text/plain": [
" Q41 Q42 Q43 Q44 Q45 Q46 Q47 Q48 Q49 Q410 Q411 Q412 Q413 Q414 \\n",
"0 3 3 3 3 3 4 5 5 5 5 3 3 3 3 \n",
"1 4 4 4 4 4 2 2 2 2 5 5 2 2 2 \n",
"2 4 4 4 4 4 5 5 5 5 5 3 3 3 3 \n",
"3 4 4 4 4 4 5 5 5 5 5 3 3 3 3 \n",
"4 4 4 4 4 3 5 5 5 3 3 3 4 4 3 \n",
"\n",
" A1 A2 A3 \n",
"0 -1.61 1.91 -1.06 \n",
"1 1.29 -2.49 -0.99 \n",
"2 -0.04 1.89 -1.29 \n",
"3 -0.04 1.89 -1.29 \n",
"4 -0.23 0.77 -0.60 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"raw_data = pd.read_csv(\"257 928.csv\").loc[:,['Q41','Q42','Q43','Q44','Q45',\n",
" 'Q46','Q47','Q48','Q49','Q410',\n",
" 'Q411','Q412','Q413','Q414',\n",
" 'A1','A2','A3']]\n",
"raw_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Q41', 'Q42', 'Q43', 'Q44', 'Q45', 'Q46', 'Q47', 'Q48', 'Q49', 'Q410',\n",
" 'Q411', 'Q412', 'Q413', 'Q414', 'A1', 'A2', 'A3'],\n",
" dtype='object')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"raw_data.columns"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def linear_model(X,w):\n",
" ,loop = np.shape(X)\n",
" sum = 0\n",
" for i in range(loop):\n",
" sum += w[i] * X[:,i]\n",
" return sum"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def loss_function(x_train, y_train, w):\n",
" X = x_train\n",
" Y_pred = linear_model(X,w)\n",
" J = metrics.mean_squared_error(y_train, Y_pred)\n",
" return J"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def model(x_train, y_train, mini=1e-10, alpha=0.001, delta = 0.005, max_iter = 100, max_step = 5000): \n",
" step = 0\n",
" _,loop = np.shape(x_train)\n",
" w = np.random.rand(loop)\n",
" while(True):\n",
" weights = np.array(w)\n",
" for i in range(0, len(w)):\n",
" step
= 0\n",
" while (True):\n",
" # simplified gradient descent\n",
" w_backup = w[i] \n",
" loss_present = loss_function(x_train, y_train, w)\n",
" w[i] = w_backup + delta\n",
" loss_plus = loss_function(x_train, y_train, w)\n",
" w[i] = w_backup - delta\n",
" loss_sub = loss_function(x_train, y_train, w)\n",
" if (loss_present < loss_plus and loss_present < loss_sub) or step_ >= max_step:\n",
" break\n",
" # update weights\n",
" w[i] = w_backup - alpha*(loss_plus - loss_sub)/(2*delta)\n",
" #w[i] = w_backup + alpha if loss_plus < loss_sub else w_backup - alpha\n",
" step_ += 1\n",
" offset = np.sum(np.square(np.array(w) - weights))\n",
" # end condition\n",
" step += 1\n",
" if (offset < mini) or (step >= max_iter):\n",
" break\n",
" return w, loss_present"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def obtain_elements(x_data, y_data, num):\n",
" comp_list = []\n",
" metric_list = []\n",
" w_list = []\n",
" pca_list = []\n",
" for comp in range(num):\n",
" n_comp = comp + 1\n",
" # pca\n",
" comp_list.append(n_comp)\n",
" pca = PCA(n_components=n_comp,svd_solver='auto')\n",
" X_ = x_data - np.mean(x_data)\n",
" pca.fit(X_, y_data)\n",
" X = pca.transform(X_)\n",
" # linear reg\n",
" pca_list.append(pca)\n",
" w, metric = model(X, y_data )\n",
" w_list.append(w)\n",
" metric_list.append(metric)\n",
" ind = metric_list.index(min(metric_list))\n",
" print(\"metrics :\" ,metric_list)\n",
" return comp_list[ind], pca_list[ind], w_list[ind]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# 第一组\n",
"x1_data = raw_data.loc[:,['Q41','Q42','Q43','Q44','Q45']]\n",
"y1_data = raw_data.loc[:,['A2']]\n",
"len1 = 5\n",
"# 第二组\n",
"x2_data = raw_data.loc[:,['Q46','Q47','Q48','Q49','Q410']]\n",
"y2_data = raw_data.loc[:,['A1']]\n",
"len2 = 5\n",
"# 第三组\n",
"x3_data = raw_data.loc[:,['Q411','Q412','Q413','Q414']]\n",
"y3_data = raw_data.loc[:,['A3']]\n",
"len3 = 4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 计算PLSR"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" 第一组"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"metrics : [0.937338177736278, 0.90366935147199, 0.9036905658620544, 0.9028029958313659, 0.9022534567720741]\n",
"第一组的主成分保留5个\n",
"回归系数为: [-0.17477811 0.25885742 -0.01157531 -0.07843881 0.06077944]\n"
]
}
],
"source": [
"comp_1, pca_1, w1 = obtain_elements(x1_data, y1_data, len1)\n",
"print(\"第一组的主成分保留%d个\"%comp_1)\n",
"print(\"回归系数为:\", w1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" 第二组"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"metrics : [0.9216669179495057, 0.9126959565507735, 0.900633447790304, 0.8930927646735571, 0.8824868647839249]\n",
"第二组的主成分保留5个\n",
"回归系数为: [-0.19525742 -0.14575206 -0.20305816 -0.17987887 -0.22941539]\n"
]
}
],
"source": [
"comp_2, pca_2, w2 = obtain_elements(x2_data, y2_data, len2)\n",
"print(\"第二组的主成分保留%d个\"%comp_2)\n",
"print(\"回归系数为:\", w2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" 第三组"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"metrics : [0.07356179930507709, 0.06803873635782488, 0.06747567528450515, 0.06722983639980304]\n",
"第三组的主成分保留4个\n",
"回归系数为: [-0.67029064 -0.10083604 0.0447786 -0.04806739]\n"
]
}
],
"source": [
"comp_3, pca_3, w3 = obtain_elements(x3_data, y3_data, len3)\n",
"print(\"第三组的主成分保留%d个\"%comp_3)\n",
"print(\"回归系数为:\", w3)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
最小二乘法可以对闭合曲线进行拟合么?
如题,因为网上的例子对点集进行拟合基本都是不闭合的曲线,能不能给段最小二乘法的实现代码,C语言的
C++超大整数结构体实现乘法,就像要个乘法,网上的看不懂,希望来回答的能多写点注释或者给我讲讲!菜鸟求大佬
``` #include <stdio.h> #include <iostream> #include <string.h> #include <stdlib.h> #include <algorithm> using namespace std; //我们把输入的两个操作数放在结构体中方便解决 //首先,为了方便后面运算,我们先定义一个结构体把超长整数都定义为此类型 struct doublelong{ int d[1000]; //定义一维数组D int len; //下面定义构造函数,初始化,给予长度 doublelong(){ memset(d,0,sizeof(d)); //memset为初始化函数 数组d sizeof求出的d大小赋予空间 指向要填充的内存块d //d用于存放 输入的两个操作数 //全初始化为0 len=0; } }; //大整数使用字符串输入的, //下面将字符串储存的大整数 //存放在结构体中 doublelong change(char str[]){ doublelong a; a.len=strlen(str);//得出输入的大整数长度写入结构体中 for(int i=0;i<a.len;i++){ a.d[i]=str[a.len-i-1]-'0';//这里把大整数的地位切换为高位 反序 } return a; } //比较两个大整数的大小 int compare(doublelong a,doublelong b){ int g; //greater此处返回更大数字 g的值为1时a的值更大,2时b的值更大,为0时两个数字的值相等 //由于我们此函数只比较两个输入数字的绝对值,由于运算方式是单独判断符号所以不对符号进行比较 if(a.len>b.len){ g=1;return g;//a大于b } else if(a.len<b.len){ g=2; return g;//a<b } else{ for(int i=a.len-1;i>=0;i++) //一位位对比一位位读取向后读 { if(a.d[i]>b.d[i]) { g=1;return g; } if(a.d[i]<b.d[i]) { g=2;return g; } if(a.d[i]=b.d[i]) { g=0;return g; } } } } //下面是大数的四则运算法则 doublelong add(doublelong a,doublelong b) { doublelong c; int carry=0;//这里的carry表示进位 for(int i=0;i<a.len||i<b.len;i++) //循环向后读取相加 { int temp=a.d[i]+b.d[i]+carry; c.d[c.len++]=temp%10; //将我们相加得到的temp值给写入我们的输出大整数c中去 carry=temp/10;//求是否有进位 } if(carry!=0) {//如果最后一位的进位不为0,直接付给结果的最高位 c.d[c.len++] =carry; } return c;//程序结束返回doublelong c } void print(doublelong a) { for(int i=a.len-1;i>=0;i--) { printf("%d",a.d[i]); } } ```
偏最小二乘法中交叉有效性问题
单因变量的偏最小二乘法中,交叉有效性检验,有些matlab程序中if i>1 Q_h2(i)=1-press(i)/ss(i-1) else Q_h2(1)=1 end 请问一下,为什么有些论文中的Q_h2(1)不等于1呢?具体是怎么回事,望大神不吝赐教
悬赏问题,缺B都来!怎么用Java语言递归方法输出99乘法表,要完整的代码
悬赏问题,缺B都来!怎么用Java语言递归方法输出99乘法表,要完整的代码
蓝桥杯 矩阵乘法.........
给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A = 1 2 3 4 A的2次幂 7 10 15 22 Input Description 第一行是一个正整数N、M(1< =N< =30, 0< =M< =5),表示矩阵A的阶数和要求的幂数 接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值 Output Description 输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开 Sample Input 2 2 1 2 3 4 Sample Output 7 10 15 22 ```#include <stdio.h> int main() { int m, n, i, j, k, l; int a[50][50] = {0}; int b[50][50] = {0}; int c[50][50] = {0}; scanf("%d %d", &n, &m); for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { scanf("%d", &a[i][j]); c[i][j] = a[i][j]; b[i][j] = 0; } } while(--m) { for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { for( k = 0; k < n; k++ ) { b[i][j] = b[i][j] + a[i][k] * c[k][j]; } } } for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { c[i][j] = b[i][j]; b[i][j] = 0; } } } for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { if( j == 0 ) printf("%d", c[i][j]); else printf(" %d", c[i][j]); } printf("\n"); } return 0; } ``` 这个提交显示超时咋办,求大佬指点
最小二乘法的 C 语言实现
1、实验目的: 进一步熟悉曲线拟合的最小二乘法。 掌握编程语言字符处理程序的设计和调试技术。 2、实验要求: 输入:已知点的数目以及各点坐标 。 输出:根据最小二乘法原理以及各点坐标求出拟合曲线 。 3、程序流程: (1)输入已知点的个数; (2)分别输入已知点的 X 坐标; (3)分别输入已知点的 Y 坐标; (4)通过调用函数,求出拟合曲线。
曲线拟合,利用最小二乘法函数
如何实现曲线拟合,利用最小二乘法,或者画布功能,Tbchart功能实现具体案例
php类型:编程实现一个计算器类。类中有两个成员属性表示操作数,通过类的构造方法可以为成员属性赋值。当调用“加法”成员方法时返回两个操作数相加的结果。同理,再实现“减法”、“乘法”和“除法”。
php:编程实现一个计算器类。类中有两个成员属性表示操作数,通过类的构造方法可以为成员属性赋值。当调用“加法”成员方法时返回两个操作数相加的结果。同理,再实现“减法”、“乘法”和“除法”。
利用二维数组和多层for循环实现九九乘法表并显示出来
用c语言 1.利用二维数组和多层for循环实现九九乘法表并显示出来 2.用数组,键盘输入8个同学成绩,求平均数并显示出来。
java的static相关问题,希望大佬解答一下
今天用static修饰一个二维数组做矩阵相乘,是这样写的,但是后来发现当我第二次运算的时候,把第一次运算的结果也改变了,static为什么会这样? //矩阵乘法 static long[][] l=new long[2][2]; public static long[][] Matrix(long[][] a,long[][] b){ System.out.println("lkkk"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { l[i][j]+=a[i][k]*b[k][j]; } } } return l; }
c#实现最小二乘法线性拟合
public class MatrixEquation { private double[,] gaussMatrix; private int coe; public MatrixEquation() { } public MatrixEquation(double[] arrX, double[] arrY, int n) { coe = n; gaussMatrix = GetGauss(GetXPowSum(arrX, n), GetXPowYSum(arrX, arrY, n), n); } public double[,] GetGaussMatrix() { return gaussMatrix; } public double[] GetResult() { return ComputeGauss(gaussMatrix, coe); } /// <summary> 计算获取x散点的幂次和数组 </summary>  /// <param name="arrX">x散点序列</param>  /// <param name="n">函数拟合次数</param>  /// <returns></returns>  protected double[] GetXPowSum(double[] arrX, int n) { int m = arrX.Length;//X散点的个数 double[] xPow = new double[2 * n + 1]; //存储X散点的幂次值 for (int i = 0; i < xPow.Length; i++) { if (i == 0) { xPow[i] = m; } else { //计算x的i次方和 double max = 0; for (int j = 0; j < m; j++) { if (arrX[j] == 0) max = max + 1; else max = max + Math.Pow(arrX[j], i); } xPow[i] = Math.Round(max, 4); } } return xPow; } /// <summary>计算获取xy的幂次和序列 </summary>  /// <param name="arrX">x散点序列</param>  /// <param name="arrY">y散点序列</param>  /// <param name="n">拟合曲线次数</param>  /// <returns></returns>  protected double[] GetXPowYSum(double[] arrX, double[] arrY, int n) { int m = arrX.Length;//X散点的个数 double[] xyPow = new double[n + 1]; //仓储X散点的幂次值 for (int i = 0; i < xyPow.Length; i++) { //计算xy的i次方和 double max = 0; for (int j = 0; j < m; j++) { if (arrX[j] == 0) max = max + 1; else max = max + Math.Pow(arrX[j], i) * arrY[j]; } xyPow[i] = Math.Round(max, 4); } return xyPow; } /// <summary> 获取高斯矩阵(增广矩阵) </summary>      /// <param name="arrX">X的幂次和</param>  /// <param name="arrXY">XY的幂次和</param>  /// <param name="n">拟合曲线次数</param>  /// <returns></returns>  protected double[,] GetGauss(double[] arrX, double[] arrXY, int n) { double[,] gauss = new double[n + 1, n + 2]; for (int i = 0; i < n + 1; i++) { int j; int m = i; for (j = 0; j < n + 1; j++) { gauss[i, j] = arrX[m]; m++; } gauss[i, j] = arrXY[i]; } return gauss; } /// <summary> 求解拟合曲线的系数 </summary>            /// <param name="gauss">线性方程的增广矩阵</param>  /// <param name="n">方程次数</param>  /// <returns></returns>  protected double[] ComputeGauss(double[,] gauss, int n) { double[] a = new double[n + 1]; double s; int matrixLine = n + 1; for (int i = 0; i < n + 1; i++) a[i] = 0; //循环每列 for (int j = 0; j < matrixLine; j++) { //每列J行以后的绝对值最大值 double max = 0; int k = j; for (int i = j; i < matrixLine; i++) { if (Math.Abs(gauss[i, j]) > max) { max = gauss[i, j]; k = i; } } //判断j行否为最大值行 若不是将j行调换为最大值行 if (k != j) { double temp; for (int m = j; m < matrixLine + 1; m++) { temp = gauss[j, m]; gauss[j, m] = gauss[k, m]; gauss[k, m] = temp; } } if (max == 0) { //奇异矩阵无解 return a; } //进行初等行变换得到上三角矩阵 for (int i = j + 1; i < matrixLine; i++) { s = gauss[i, j]; for (int m = j; m < matrixLine + 1; m++) { gauss[i, m] = Math.Round(gauss[i, m] - gauss[j, m] * s / gauss[j, j], 6); } } } //根据倒推方式一次计算现行方程的解 for (int i = matrixLine - 1; i >= 0; i--) { s = 0; for (int j = i + 1; j < matrixLine; j++) { s += gauss[i, j] * a[j]; } a[i] = Math.Round((gauss[i, matrixLine] - s) / gauss[i, i], 6); } //返回方程的解即拟合曲线的系数 return a; } } ------------------------ 以上是本人在网上看到的一个例子,但是不理解该怎么样测试这个类,请各位大神赐教!或者可以提供相关参考链接也可以。
如何用最小二乘法求解多项式拟合曲线的系数y=a0+a1x+a2X的平方+a3x的立方
请教下大家: 如何用最小二乘法求解多项式拟合曲线的系数y=a0+a1x+a2X的平方+a3x的立方中a0、a1、a2、a3的值呢?根据4组x、y值
C语言数学函数拟合(最小二乘法)
参数说明: double Step_A, // A参数步长 double Step_B, // B参数步长 double Step_C, // C参数步长 double Range_A_Down, // A参数取值下限 double Range_B_Down, // B参数取值下限 double Range_C_Down, // C参数取值下限 double Range_A_Up, // A参数取值上限 double Range_B_Up, // B参数取值上限 double Range_C_Up, // C参数取值上限 double Sigma_Down // Sigma容忍值下限 最小二乘法函数: int Sigma_Converge_Func( double Step_A, double Step_B, double Step_C, double Range_A_Down, double Range_B_Down, double Range_C_Down, double Range_A_Up, double Range_B_Up, double Range_C_Up, double Sigma_Down) { for(A=Range_A_Down;A < Range_A_Up;A += Step_A) // 第一层循环,扫描A参数 { for(B=Range_B_Down;B < Range_B_Up;B += Step_B) // 第二层循环,扫描B参数 { for(C=Range_C_Down;C < Range_C_Up;C += Step_C) // 第三层循环,扫描C参数 { Sigma = 0; for(int i=0;i<PtsNum;i++) { y0[i] = A*x[i]*x[i]+B*x[i]+C; y1[i] = (y[i]-y0[i])*(y[i]-y0[i]); Sigma += y1[i]; } if(Sigma < Sigma_Buff) { Sigma_Buff = Sigma; if(Sigma <= Sigma_Down) { return 1; } } else { } } } } return 0; } 下面是三级优化: // 第一轮优化,大步长,大范围,进行快速扫描,缩小范围 Sigma_Converge_Func( Step_A0, Step_B0, Step_C0, Range_A_Down0, Range_B_Down0, Range_C_Down0, Range_A_Up0, Range_B_Up0, Range_C_Up0, Sigma_Down0 ); // 第二轮优化,范围适当缩小,-100~+100,步长缩小为1,快速扫描,进一步缩小范围 Range_A_Down0 = A - 100; Range_A_Up0 = A + 100; Range_B_Down0 = B - 100; Range_B_Up0 = B + 100; Range_C_Down0 = C - 100; Range_C_Up0 = C + 100; Step_A0 = 1; Step_B0 = 1; Step_C0 = 1; Sigma_Down0 = 1000; Sigma_Converge_Func( Step_A0, Step_B0, Step_C0, Range_A_Down0, Range_B_Down0, Range_C_Down0, Range_A_Up0, Range_B_Up0, Range_C_Up0, Sigma_Down0 ); // 第三轮优化,范围十分小,步长为0.1,逐步扫描,直至Sigma趋近于0,暂定为小于1e-9即可 Range_A_Down0 = A - 1; Range_A_Up0 = A + 1; Range_B_Down0 = B - 10; Range_B_Up0 = B + 10; Range_C_Down0 = C - 10; Range_C_Up0 = C + 10; Step_A0 = 0.1; Step_B0 = 0.1; Step_C0 = 0.1; Sigma_Down0 = 1e-9; if (true == Sigma_Converge_Func( Step_A0, //若Sigma_Converge_Func()的返回值为1,即Sigma<Sigma_Down0,此时的参数最适合 Step_B0, Step_C0, Range_A_Down0, Range_B_Down0, Range_C_Down0, Range_A_Up0, Range_B_Up0, Range_C_Up0, Sigma_Down0 )) 思路和问题:(题目:通过10个已知坐标和函数模型(带3个参数)拟合出原函数) 对于函数原型y=A*x^2+B*x+C来说,假设A,B,C三个参数是从-1000到1000,本来我打算设置0.1的步长,从-1000扫描到1000,可是这样的话三层循环都是从-1000到1000以0.1的步长扫描参数,太慢了,然后我就想设定一个Sigma的容忍值,第一次扫描到Sigma<(一个值)就退出二乘法函数,然后重新在得到的大概的A,B,C参数值附近再进行下一步扫描,然后继续缩小Sigma的值,再重复一次,直至Sigma逼近0,这也就是说A,B,C参数就是我想要的值。 但是这个方法有问题,当我换一个函数模型时,程序就不行了,好比说,A,B,C正确值分别是A=5,B=20,C=-35,可是我在第一次扫描时得到Sigma<(一个值)时的A=-20,B=40,C=-30,那么程序会自动在这个附近进行下一次扫描,比如说在A=-30~-10之间进行扫描,B,C以此类推,但是这远远偏离了正确值,需要重新手动调整扫描范围才能让结果趋向于正确值。 请问该怎么办,我想不出好的解决办法。谢谢大家!
最小二乘法 求导,公式不太理解
这个公式推导过程不理解,求指导。 ![图片说明](https://img-ask.csdn.net/upload/201809/03/1535961354_20434.png)
浮点数和整型之间的乘法 和变量的位置有关系吗?
``` #include<iostream> using namespace std; int main(){ int n; cin >> n; double sum=0.0,temp; for(int i=1;i<=n;i++) { cin >> temp; sum+=i*(n-i+1)*temp; } printf("%.2f",sum); return 0; } ``` ``` #include<iostream> using namespace std; int main(){ int n; cin >> n; double sum=0.0,temp; for(int i=1;i<=n;i++) { cin >> temp; sum+=temp*i*(n-i+1); } printf("%.2f",sum); return 0; } ``` 两个代码的区别就是 sum+= temp*i*(n-i+1) ,temp 的位置不同,可是第一个不能ac,第二个能ac,这是PTA上的一个题目。 求大佬解答一下,小白感激不尽。
python如何对A列表的某列与B列表的每一行做乘法,最好用for循环
![图片说明](https://img-ask.csdn.net/upload/201909/26/1569461580_795778.png) 如图所示,将生成列表A一列的数据,与列表B三行依次作乘,用到for循环,请问应该怎么实现呢,小白求解。。
机器人DH模型校正,为什么不能通过测量每2个关节的4个参数,然后直接得到与理论的参数的偏差去补偿呢?
各个大大好,先鞠躬一个,请大大们多指点。 由于导师叫我搞基于动力学参数的机器人绝对精度矫正,我看了一些机器人的书,也看了一些别人写的研究生论文,发觉他们都是用激光跟踪仪测量机器人末端轨迹,然后通过微分方程或者雅克比矩阵建立误差模型,然后用最小二乘法的方法寻优求取各个关节的DH参数误差。我觉得这样求出的各个关节的DH参数误差,是一个优化的误差值(就是寻优后6个关节的大致误差值,不是绝对误差值)。我在想,能否在测量的时候,把每个关节一一测量,比如我在实验室已经分别测量出来1和2关节的4个DH参数,2和3关节的4个DH参数……,5和6关节的4个DH参数,然后和理论上的DH参数(就是根据设计图纸,建立各个关节的坐标系,计算出来的,比如垂直关节的α是90度,a是0;平行关节的α是0度,a连杆长度),然后测量的值和理论值之间,不就是各个关节的DH参数的误差了吗?用这个求出的各个关节的误差去补偿,不好吗?为什么还要建立微分误差模型去寻优求取24个参数的误差那??
Java难题,大神进来协助,怎么用java实现99乘法表,输出出来要带换行
Java难题,大神进来协助,怎么用java实现99乘法表,输出出来要带换行
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
前后端分离后,维护接口文档基本上是必不可少的工作。 一个理想的状态是设计好后,接口文档发给前端和后端,大伙按照既定的规则各自开发,开发好了对接上了就可以上线了。当然这是一种非常理想的状态,实际开发中却很少遇到这样的情况,接口总是在不断的变化之中,有变化就要去维护,做过的小伙伴都知道这件事有多么头大!还好,有一些工具可以减轻我们的工作量,Swagger2 就是其中之一,至于其他类似功能但是却收费的软...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
天天学JAVA-JAVA基础(6)
如果觉得我写的还行,请关注我的博客并且点个赞哟。本文主要介绍JAVA 中最常使用字符串常量String相关知识。 1.String简介 2.创建字符串对象两种方式的区别 3.String常用的方法 4.String的不可变性 5.一道阿里面试题,你会做吗? 1.String简介 1.1String源码 首先看一段String源码,String主要实现了Serializable、Compar...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
2020 网络课 智慧树自动刷课代码,自动跳转,自动答题并关闭弹窗,自动1.5倍速静音
刷课一时爽,一直刷课一直爽! 终于让我找到了这个黑客代码了,教程开始: 只限谷歌浏览器和火狐浏览器使用,如果第一次失败,请重新试一下次 将下面代码复制后,进入浏览器按F12键,先点击console 然后Ctrl+v复制代码 最后按回车键即可 var ti = $("body"); var video = $(".catalogue_ul1 li[id*=video-]"); var i = 1;...
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
羞,Java 字符串拼接竟然有这么多姿势
二哥,我今年大二,看你分享的《阿里巴巴 Java 开发手册》上有一段内容说:“循环体内,拼接字符串最好使用 StringBuilder 的 append 方法,而不是 + 号操作符。”到底为什么啊,我平常一直就用的‘+’号操作符啊!二哥有空的时候能否写一篇文章分析一下呢? 就在昨天,一位叫小菜的读者微信我说了上面这段话。 我当时看到这条微信的第一感觉是:小菜你也太菜了吧,这都不知道为啥啊!我估...
写1行代码影响1000000000人,这是个什么项目?
不带钱不带卡,只带手机出门就能畅行无阻,这已是生活的常态。益普索发布的《2019第一季度第三方移动支付用户研究》报告显示,移动支付在手机网民中的渗透率高达95.1%,截至今年1月,支付宝全球用户数已经突破10亿。你或许每天都会打开支付宝,付款购物、领取权益、享受服务……但你或许不知道的是,在这个方便、快捷、智能化的APP背后,有一群年轻的技术人,用智慧和创新让它每天都变得更“聪明”一点。 ...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
一点一滴记录 Java 8 stream 的使用
日常用到,一点一滴记录,不断丰富,知识积累,塑造自身价值。欢迎收藏 String 转 List String str = 1,2,3,4; List&lt;Long&gt; lists = Arrays.stream(str.split(",")).map(s -&gt; Long.parseLong(s.trim())).collect(Collectors.toList()); Lis...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的段子
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问

相似问题

0
使用最小二乘法确定多元多表达式的函数
0
请问如何使用mysql编写函数或者存储过程实现最小二乘法?
1
python rolling有乘法功能吗
1
这段代码是用最小二乘法拟合椭圆方程来判断人眼的状态的么?
0
矩阵乘法的一种计算公式的实现的方式,怎么采用C程序的语言的代码的编写技术来实现呢
0
最长的公共的乘法的运算,采用C程序语言代码编写程序的方式的实现的步骤具体怎么做?
2
大佬帮我看看我的程序为什么不正确
2
求助:关于C语言两个乘法int溢出来 及其余基本类型溢出来的解决方法。
0
依据最后公共乘法的原理来计算序列,用C语言的程序的代码编写实现这个功能的要求的办法
1
再一个乘法等式中出现所有的数字,怎么用C语言的程序编写代码设计的技术的方式来实现的呢
0
矩阵交叉的乘法进行列表,怎么使用C语言的程序编写的程序的设计的思想方法来实现的计算的呢?
1
求用C实现多高斯拟合的代码。
1
matlab三维空间离散点怎么做最小二乘拟合
2
Coursera deeplearning作业代码的关于数组乘法的相关问题
1
CCF 2019.3 二十四点 自己写了一个代码手打各种样例都没问题可是只有30分
1
关于201903-2,我样例能通过,但是只有30分,谁能帮忙想出不能通过的特殊样例?
0
LCM的乘法问题怎么解决
1
救救孩子吧 求用C设计一个自动生成四则运算试题的程序
1
直线拟合时出现的问题
3
python如何对A列表的某列与B列表的每一行做乘法,最好用for循环