Close Menu
    Facebook LinkedIn YouTube WhatsApp X (Twitter) Pinterest
    Trending
    • Our Favorite Apple Watch Has Never Been Less Expensive
    • Vercel says it detected unauthorized access to its internal systems after a hacker using the ShinyHunters handle claimed a breach on BreachForums (Lawrence Abrams/BleepingComputer)
    • Today’s NYT Strands Hints, Answer and Help for April 20 #778
    • KV Cache Is Eating Your VRAM. Here’s How Google Fixed It With TurboQuant.
    • OneOdio Focus A1 Pro review
    • The 11 Best Fans to Buy Before It Gets Hot Again (2026)
    • A look at Dylan Patel’s SemiAnalysis, an AI newsletter and research firm that expects $100M+ in 2026 revenue from subscriptions and AI supply chain research (Abram Brown/The Information)
    • ‘Euphoria’ Season 3 Release Schedule: When Does Episode 2 Come Out?
    Facebook LinkedIn WhatsApp
    Times FeaturedTimes Featured
    Sunday, April 19
    • Home
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    • More
      • AI
      • Robotics
      • Industries
      • Global
    Times FeaturedTimes Featured
    Home»Artificial Intelligence»PyTorch Tutorial for Beginners: Build a Multiple Regression Model from Scratch
    Artificial Intelligence

    PyTorch Tutorial for Beginners: Build a Multiple Regression Model from Scratch

    Editor Times FeaturedBy Editor Times FeaturedNovember 19, 2025No Comments15 Mins Read
    Facebook Twitter Pinterest Telegram LinkedIn Tumblr WhatsApp Email
    Share
    Facebook Twitter LinkedIn Pinterest Telegram Email WhatsApp Copy Link


    earlier than LLMs turned hyped, there was an nearly seen line separating Machine Studying frameworks from Deep Studying frameworks.

    The discuss was targeting Scikit-Study, XGBoost, and comparable for ML, whereas PyTorch and TensorFlow dominated the scene when Deep Studying was the matter.

    After the AI explosion, although, I’ve been seeing PyTorch dominating the scene far more than TensorFlow. Each frameworks are actually highly effective, enabling Information Scientists to resolve completely different sorts of issues, Pure Language Processing being one in all them, subsequently rising the recognition of Deep Studying as soon as once more.

    Nicely, on this publish, my thought is to not speak about NLP, however as an alternative, I’ll work with a multivariable linear regression downside with two goals in thoughts:

    • Instructing the best way to create a mannequin utilizing PyTorch
    • Sharing information about Linear Regression that isn’t at all times present in different tutorials.

    Let’s dive in.

    Making ready the Information

    Alright, let me spare you from a elaborate definition of Linear Regression. You in all probability noticed that too many occasions in numerous tutorials all around the Web. So, sufficient to say that when you could have a variable Y that you just need to predict and one other variable X that may clarify Y’s variation utilizing a straight line, that’s, in essence, Linear Regression.

    Dataset

    For this train, let’s use the Abalone dataset [1].

    Nash, W., Sellers, T., Talbot, S., Cawthorn, A., & Ford, W. (1994). Abalone [Dataset]. UCI Machine Studying Repository. https://doi.org/10.24432/C55C7W.

    In keeping with the dataset documentation, the age of abalone is set by slicing the shell by way of the cone, staining it, and counting the variety of rings by way of a microscope, a boring and time-consuming job. Different measurements, that are simpler to acquire, are used to foretell the age.

    So, allow us to go forward and cargo the info. Moreover, we are going to One Sizzling Encode the variable Intercourse, since it’s the solely categorical one.

    # Information Load
    from ucimlrepo import fetch_ucirepo
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    sns.set_style('darkgrid')
    from feature_engine.encoding import OneHotEncoder
    
    # fetch dataset
    abalone = fetch_ucirepo(id=1)
    
    # knowledge (as pandas dataframes)
    X = abalone.knowledge.options
    y = abalone.knowledge.targets
    
    # One Sizzling Encode Intercourse
    ohe = OneHotEncoder(variables=['Sex'])
    X = ohe.fit_transform(X)
    
    # View
    df = pd.concat([X,y], axis=1)

    Right here’s the dataset.

    Dataset header. Picture by the writer.

    So, to be able to create a greater mannequin, let’s discover the info.

    Exploring the Information

    The primary steps I wish to carry out when exploring a dataset are:

    1. Checking the goal variable’s distribution.

    #  our Goal variable
    plt.hist(y)
    plt.title('Rings [Target Variable] Distribution');

    The graphic exhibits that the goal variable shouldn’t be usually distributed. That may impression the regression, however normally will be corrected with an influence transformation, reminiscent of log or Field-Cox.

    Goal variable distribution. Picture by the writer.

    2. Have a look at the statistical description.

    The stats can present us necessary info like imply, commonplace deviation, and simply spot some discrepancies by way of minimal or most values. The explanatory variables are just about okay, inside a smaller vary, and identical scale. The goal variable (Rings) is in a special scale.

    # Statistical description
    df.describe()
    Statistical description. Picture by the writer.

    Subsequent, let’s examine the correlations.

    # Trying on the correlations
    (df
     .drop(['Sex_M', 'Sex_I', 'Sex_F'],axis=1)
     .corr()
     .fashion
     .background_gradient(cmap='coolwarm')
    )
    Correlations. Picture by the writer.

    The explanatory variables have a reasonable to sturdy correlation with Rings. We are able to additionally see that there’s some collinearity between Whole_weight with Shucked_weight, Viscera_weight, and Shell_weight. Size and Diameter are additionally collinear. We are able to take a look at eradicating them later.

    sns.pairplot(df);

    Once we plot the pairs scatterplots and take a look at the connection of the variables with Rings, we are able to rapidly determine some issues

    • The idea of homoscedasticity is violated. Which means that the connection shouldn’t be homogeneous by way of variance.
    • Look how the plots kind a cone form, rising the variance of Y because the X values enhance. When estimating the worth of Rings for increased values of the X variables, the estimate is not going to be very correct.
    • The variable Top has at the very least two outliers which are very seen when Top > 0.3.
    Pairplots no transformation. Picture by the writer.

    Eradicating the outliers and remodeling the goal variable to logarithms will consequence within the subsequent plot of the pairs. It’s higher, however nonetheless doesn’t remedy the homoscedasticity downside.

    Pairplots after transformation. Picture by the writer.

    One other fast exploration we are able to do is plotting some graphics to examine the connection of the variables when grouped by the Intercourse variable.

    The variable Diameter has probably the most linear relationship when Intercourse=I, however that’s all.

    # Create a FacetGrid with scatterplots
    sns.lmplot(x="Diameter", y="Rings", hue="Intercourse", col="Intercourse", order=2, knowledge=df);
    Diameter x Rings. Picture by the writer.

    Alternatively, Shell_weight has an excessive amount of dispersion for prime values, distorting the linear relationship.

    # Create a FacetGrid with scatterplots
    sns.lmplot(x="Shell_weight", y="Rings", hue="Intercourse", col="Intercourse", knowledge=df);
    Shell_weight x Rings. Picture by the writer.

    All of this exhibits {that a} Linear Regression mannequin could be actually difficult for this dataset, and can in all probability fail. However we nonetheless need to do it.

    By the way in which, I don’t bear in mind seeing a publish the place we really undergo what went flawed. So, by doing this, we are able to additionally study invaluable classes.

    Modeling: Utilizing Scikit-Study

    Let’s run the sklearn mannequin and consider it utilizing Root Imply Squared Error.

    from sklearn.linear_model import LinearRegression
    from sklearn.metrics import root_mean_squared_error
    
    df2 = df.question('Top < 0.3 and Rings > 2 ').copy()
    X = df2.drop(['Rings'], axis=1)
    y = np.log(df2['Rings'])
    
    lr = LinearRegression()
    lr.match(X, y)
    
    predictions = lr.predict(X)
    
    df2['Predictions'] = np.exp(predictions)
    print(root_mean_squared_error(df2['Rings'], df2['Predictions']))
    2.2383762717104916

    If we take a look at the header, we are able to affirm that the mannequin struggles with estimates for increased values (e.g., rows 0, 6, 7, and 9).

    Header with predictions. Picture by the writer.

    One Step Again: Making an attempt Different Transformations

    Alright. So what can we do now?

    Most likely take away extra outliers and take a look at once more. Let’s attempt utilizing an unsupervised algorithm to search out some extra outliers. We’ll apply the Native Outlier Issue, dropping 5% of the outliers.

    We will even take away the multicollinearity, dropping Whole_weight and Size.

    from sklearn.neighbors import LocalOutlierFactor
    from sklearn.preprocessing import StandardScaler
    from sklearn.pipeline import Pipeline
    
    # fetch dataset
    abalone = fetch_ucirepo(id=1)
    
    # knowledge (as pandas dataframes)
    X = abalone.knowledge.options
    y = abalone.knowledge.targets
    
    # One Sizzling Encode Intercourse
    ohe = OneHotEncoder(variables=['Sex'])
    X = ohe.fit_transform(X)
    
    # Drop Complete Weight and Size (multicolinearity)
    X.drop(['Whole_weight', 'Length'], axis=1, inplace=True)
    
    # View
    df = pd.concat([X,y], axis=1)
    
    # Let's create a Pipeline to scale the info and discover outliers utilizing KNN Classifier
    steps = [
    ('scale', StandardScaler()),
    ('LOF', LocalOutlierFactor(contamination=0.05))
    ]
    # Match and predict
    outliers = Pipeline(steps).fit_predict(X)
    
    # Add column
    df['outliers'] = outliers
    
    # Modeling
    df2 = df.question('Top < 0.3 and Rings > 2 and outliers != -1').copy()
    X = df2.drop(['Rings', 'outliers'], axis=1)
    y = np.log(df2['Rings'])
    
    lr = LinearRegression()
    lr.match(X, y)
    
    predictions = lr.predict(X)
    
    df2['Predictions'] = np.exp(predictions)
    print(root_mean_squared_error(df2['Rings'], df2['Predictions']))
    2.238174395913869

    Identical consequence. Hmm….

    Okay. we are able to preserve enjoying with the variables and have engineering, and we are going to begin seeing some enhancements right here and there, like once we add the squared of Top, Diameter, and Shell_weight. That added to the outliers remedy will drop the RMSE to 2.196.

    # Second Order Variables
    X['Diameter_2'] = X['Diameter'] ** 2
    X['Height_2'] = X['Height'] ** 2
    X['Shell_2'] = X['Shell_weight'] ** 2

    Definitely, it’s honest to notice that each variable added in Linear Regression fashions will impression the R² and generally inflate the consequence, giving a false concept that the mannequin is enhancing, when it isn’t. On this case, the mannequin is definitely enhancing, since we’re including some non-linear parts to it with the second order variables. We are able to show that by calculating the adjusted R². It went from 0.495 to 0.517.

    # Adjusted R²
    from sklearn.metrics import r2_score
    
    r2 = r2_score(df2['Rings'], df2['Predictions'])
    n= df2.form[0]
    p = df2.form[1] - 1
    adj_r2 = 1 - (1 - r2) * (n - 1) / (n - p - 1)
    print(f'R²: {r2}')
    print(f'Adjusted R²: {adj_r2}')

    Alternatively, bringing again Whole_weight and Size can enhance somewhat extra the numbers, however I’d not suggest it. If we try this, we’re including multicolinearity and inflating the significance of some variables’ coefficients, resulting in potential estimation errors sooner or later.

    Modeling: Utilizing PyTorch

    Okay. Now that we have now a base mannequin created, the thought is to create a Linear mannequin utilizing Deep Studying and attempt to beat the RMSE of two.196.

    Proper. To start out, let me state this upfront: Deep Studying fashions work higher with scaled knowledge. Nevertheless, as our X variables are all in the identical scale, we received’t want to fret about that. So let’s preserve shifting.

    import torch
    import torch.nn as nn
    import torch.optim as optim
    from torch.utils.knowledge import DataLoader, TensorDataset

    We have to put together the info for modeling with PyTorch. Right here, we want some changes to make the info acceptable by the PyTorch framework, because it received’t take common pandas dataframes.

    • Let’s use the identical knowledge body from our base mannequin.
    • Cut up X and Y
    • Rework the Y variable to log
    • Rework each to numpy arrays, since PyTorch received’t take dataframes.
    df2 = df.question('Top < 0.3 and Rings > 2 and outliers != -1').copy()
    X = df2.drop(['Rings', 'outliers'], axis=1)
    y = np.log(df2[['Rings']])
    
    # X and Y to Numpy
    X = X.to_numpy()
    y = y.to_numpy()

    Subsequent, utilizing TensorDataset, we make X and Y turn into a Tensor object, and print the consequence.

    # Put together with TensorData
    # TensorData helps us remodeling the dataset to Tensor object
    dataset = TensorDataset(torch.tensor(X).float(), torch.tensor(y).float())
    
    input_sample, label_sample = dataset[0]
    print(f'** Enter pattern: {input_sample}, n** Label pattern: {label_sample}')
    ** Enter pattern: tensor([0.3650, 0.0950, 0.2245, 0.1010, 0.1500, 1.0000, 
    0.0000, 0.0000, 0.1332, 0.0090, 0.0225]), 
    ** Label pattern: tensor([2.7081])

    Then, utilizing the DataLoader perform, we are able to create batches of knowledge. Which means that the Neural Community will take care of a batch_size quantity of knowledge at a time.

    # Subsequent, let's use DataLoader
    batch_size = 500
    dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True)

    PyTorch fashions are greatest outlined as courses.

    • The class is predicated on the nn.Module, which is PyTorch’s base class for neural networks.
    • We outline the mannequin layers we need to use within the init methodology.
      • tremendous().__init__() ensures the category will behave like a torch object.
    • The ahead methodology describes what occurs to the enter when handed to the mannequin.

    Right here, we cross it by way of Linear layers that we outlined within the init methodology, and use ReLU activation features so as to add some non-linearity to the mannequin within the ahead cross.

    # 2. Creating a category
    class AbaloneModel(nn.Module):
      def __init__(self):
        tremendous().__init__()
        self.linear1 = nn.Linear(in_features=X.form[1], out_features=128)
        self.linear2 = nn.Linear(128, 64)
        self.linear3 = nn.Linear(64, 32)
        self.linear4 = nn.Linear(32, 1)
    
      def ahead(self, x):
        x = self.linear1(x)
        x = nn.practical.relu(x)
        x = self.linear2(x)
        x = nn.practical.relu(x)
        x = self.linear3(x)
        x = nn.practical.relu(x)
        x = self.linear4(x)
        return x
    
    # Instantiate mannequin
    mannequin = AbaloneModel()

    Subsequent, let’s attempt the mannequin for the primary time utilizing a script that simulates a Random Search.

    • Create an error criterion for mannequin analysis
    • Create an inventory to carry the info from one of the best mannequin and setup the best_loss as a excessive worth, so it will likely be changed by higher loss numbers throughout the iteration.
    • Setup the vary for the educational price. We’ll use energy components from -2 to -4 (e.g. from 0.01 to 0.0001).
    • Setup a variety for the momentum from 0.9 to 0.99.
    • Get the info
    • Zero the gradient to clear gradient calculations from earlier iterations.
    • Match the mannequin
    • Compute the loss and register one of the best mannequin’s numbers.
    • Compute the weights and biases with the backward cross.
    • Iterate N occasions and print one of the best mannequin.
    # Imply Squared Error (MSE) is commonplace for regression
    criterion = nn.MSELoss()
    
    # Random Search
    values = []
    best_loss = 999
    for idx in vary(1000):
      # Randomly pattern a studying price issue between 2 and 4
      issue = np.random.uniform(2,5)
      lr = 10 ** -factor
    
      # Randomly choose a momentum between 0.85 and 0.99
      momentum = np.random.uniform(0.90, 0.99)
    
      # 1. Get Information
      characteristic, goal = dataset[:]
      # 2. Zero Gradients: Clear outdated gradients earlier than the backward cross
      optimizer = optim.SGD(mannequin.parameters(), lr=lr, momentum=momentum)
      optimizer.zero_grad()
      # 3. Ahead Cross: Compute prediction
      y_pred = mannequin(characteristic)
      # 4. Compute Loss
      loss = criterion(y_pred, goal)
      # 4.1 Register greatest Loss
      if loss < best_loss:
        best_loss = loss
        best_lr = lr
        best_momentum = momentum
        best_idx = idx
    
      # 5. Backward Cross: Compute gradient of the loss w.r.t W and b'
      loss.backward()
      # 6. Replace Parameters: Alter W and b utilizing the calculated gradients
      optimizer.step()
      values.append([idx, lr, momentum, loss])
    
    print(f'n: {idx},lr: {lr}, momentum: {momentum}, loss: {loss}')
    n: 999,lr: 0.004782946959508322, momentum: 0.9801209929050066, loss: 0.06135804206132889

    As soon as we get one of the best studying price and momentum, we are able to transfer on.

    # --- 3. Loss Operate and Optimizer ---
    
    # Imply Squared Error (MSE) is commonplace for regression
    criterion = nn.MSELoss()
    
    # Stochastic Gradient Descent (SGD) with a small studying price (lr)
    optimizer = optim.SGD(mannequin.parameters(), lr=0.004, momentum=0.98)

    Then, we are going to re-train this mannequin, utilizing the identical steps as earlier than, however this time holding the identical studying price and momentum.

    Becoming a PyTorch mannequin wants an extended script than the common match() methodology from Scikit-Study. However it isn’t an enormous deal. The construction will at all times be just like these steps:

    1. Activate the mannequin.prepare() mode
    2. Create a loop for the variety of iterations you need. Every iteration known as an epoch.
    3. Zero the gradients from earlier passes with optimizer.zero_grad().
    4. Get the batches from the dataloader.
    5. Compute the predictions with mannequin(X)
    6. Calculate the loss utilizing criterion(y_pred, goal).
    7. Do the Backward Cross to compute the weights and bias: loss.backward()
    8. Replace the weights and bias with optimizer.step()

    We’ll prepare this mannequin for 1000 epochs (iterations). Right here, we’re solely including a step to get one of the best mannequin on the finish, so we be sure to make use of the mannequin with one of the best loss.

    # 4. Coaching
    torch.manual_seed(42)
    NUM_EPOCHS = 1001
    loss_history = []
    best_loss = 999
    
    # Put mannequin in coaching mode
    mannequin.prepare()
    
    for epoch in vary(NUM_EPOCHS):
      for knowledge in dataloader:
    
        # 1. Get Information
        characteristic, goal = knowledge
    
        # 2. Zero Gradients: Clear outdated gradients earlier than the backward cross
        optimizer.zero_grad()
    
        # 3. Ahead Cross: Compute prediction
        y_pred = mannequin(characteristic)
    
        # 4. Compute Loss
        loss = criterion(y_pred, goal)
        loss_history.append(loss)
    
        # Get Greatest Mannequin
        if loss < best_loss:
          best_loss = loss
          best_model_state = mannequin.state_dict()  # save greatest mannequin
    
        # 5. Backward Cross: Compute gradient of the loss w.r.t W and b'
        loss.backward()
    
        # 6. Replace Parameters: Alter W and b utilizing the calculated gradients
        optimizer.step()
    
        # Load one of the best mannequin earlier than returning predictions
        mannequin.load_state_dict(best_model_state)
    
      # Print standing each 50 epochs
      if epoch % 200 == 0:
        print(epoch, loss.merchandise())
        print(f'Greatest Loss: {best_loss}')
    
    0 0.061786893755197525
    Greatest Loss: 0.06033024191856384
    200 0.036817338317632675
    Greatest Loss: 0.03243456035852432
    400 0.03307393565773964
    Greatest Loss: 0.03077109158039093
    600 0.032522525638341904
    Greatest Loss: 0.030613820999860764
    800 0.03488151729106903
    Greatest Loss: 0.029514113441109657
    1000 0.0369877889752388
    Greatest Loss: 0.029514113441109657

    Good. The mannequin is educated. Now it’s time to consider.

    Analysis

    Let’s examine if this mannequin did higher than the common regression. For that, I’ll put the mannequin in analysis mode through the use of mannequin.eval(), so PyTorch is aware of that it wants to vary the habits from coaching and get into inference mode. It should flip off layer normalization and dropouts, for instance.

    # Get options
    options, targets = dataset[:]
    
    # Get Predictions
    mannequin.eval()
    with torch.no_grad():
      predictions = mannequin(options)
    
    # Add to dataframe
    df2['Predictions'] = np.exp(predictions.detach().numpy())
    
    # RMSE
    print(root_mean_squared_error(df2['Rings'], df2['Predictions']))
    2.1108551025390625

    The advance was modest, about 4%.

    Let’s take a look at some predictions from every mannequin.

    Predictions from each fashions. Picture by the writer.

    Each fashions are getting very comparable outcomes. They battle extra because the variety of Rings turns into increased. That’s because of the cone form of the goal variable.

    If we predict that by way of for a second:

    • Because the variety of Rings will increase, there’s extra variance coming from the explanatory variable.
    • An Abalone with 15 rings shall be inside a a lot wider vary of values than one other one with 4 rings.
    • This confuses the mannequin as a result of it wants to attract a single line in the course of the info that isn’t that linear.

    Earlier than You Go

    We discovered so much on this undertaking:

    • The right way to discover knowledge.
    • The right way to examine if the linear mannequin could be an excellent choice.
    • The right way to create a PyTorch mannequin for a multivariable Linear Regression.

    In the long run, we noticed {that a} goal variable that isn’t homogeneous, even after energy transformations, can result in a low-performing mannequin. Our mannequin continues to be higher than taking pictures the common worth for all of the predictions, however the error continues to be excessive, staying about 20% of the imply worth.

    We tried to make use of Deep Studying to enhance the consequence, however all that energy was not sufficient to decrease the error significantly. I’d in all probability go together with the Scikit-Study mannequin, since it’s less complicated and extra explainable.

    Different choices to attempt to enhance the outcomes could be making a customized ensemble mannequin with a Random Forest + Linear Regression. However that may be a job that I depart to you, if you’d like.

    If you happen to preferred this content material, discover me on my web site.

    https://gustavorsantos.me

    GitHub Repository

    The code for this train.

    https://github.com/gurezende/Linear-Regression-PyTorch

    References

    [1. Abalone Dataset – UCI Repository, CC BY 4.0 license.] https://archive.ics.uci.edu/dataset/1/abalone

    [2. Eval mode] https://stackoverflow.com/questions/60018578/what-does-model-eval-do-in-pytorch

    https://docs.pytorch.org/docs/stable/generated/torch.nn.Module.html#torch.nn.Module.eval

    [3. PyTorch Docs] https://docs.pytorch.org/docs/stable/nn.html

    [4. Kaggle Notebook] https://www.kaggle.com/code/samlakhmani/s4e4-deeplearning-with-oof-strategy

    [5. GitHub Repo] https://github.com/gurezende/Linear-Regression-PyTorch



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Editor Times Featured
    • Website

    Related Posts

    KV Cache Is Eating Your VRAM. Here’s How Google Fixed It With TurboQuant.

    April 19, 2026

    Proxy-Pointer RAG: Structure Meets Scale at 100% Accuracy with Smarter Retrieval

    April 19, 2026

    Dreaming in Cubes | Towards Data Science

    April 19, 2026

    AI Agents Need Their Own Desk, and Git Worktrees Give Them One

    April 18, 2026

    Your RAG System Retrieves the Right Data — But Still Produces Wrong Answers. Here’s Why (and How to Fix It).

    April 18, 2026

    Europe Warns of a Next-Gen Cyber Threat

    April 18, 2026

    Comments are closed.

    Editors Picks

    Our Favorite Apple Watch Has Never Been Less Expensive

    April 19, 2026

    Vercel says it detected unauthorized access to its internal systems after a hacker using the ShinyHunters handle claimed a breach on BreachForums (Lawrence Abrams/BleepingComputer)

    April 19, 2026

    Today’s NYT Strands Hints, Answer and Help for April 20 #778

    April 19, 2026

    KV Cache Is Eating Your VRAM. Here’s How Google Fixed It With TurboQuant.

    April 19, 2026
    Categories
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    About Us
    About Us

    Welcome to Times Featured, an AI-driven entrepreneurship growth engine that is transforming the future of work, bridging the digital divide and encouraging younger community inclusion in the 4th Industrial Revolution, and nurturing new market leaders.

    Empowering the growth of profiles, leaders, entrepreneurs businesses, and startups on international landscape.

    Asia-Middle East-Europe-North America-Australia-Africa

    Facebook LinkedIn WhatsApp
    Featured Picks

    Scaling innovation in manufacturing with AI

    November 19, 2025

    AR ski goggles enhance visibility in fog and flat light

    December 5, 2025

    10 Best Chromebooks of 2025, Tested and Reviewed

    July 1, 2025
    Categories
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    Copyright © 2024 Timesfeatured.com IP Limited. All Rights.
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us

    Type above and press Enter to search. Press Esc to cancel.